はじめに
Oracle Cloud Infrastructure(以下OCI)では、Oracle DB のマネージドサービスを提供しています。
Oracle DB のマネージドサービス(DBaaS)上で、Oracle DB の Active-Standby 構成行うために、Data Guard の設定方法を記載します。
以下の設定を行っていきます
- Data Guard 構成の設定
- 保護モードを MaxAvailability に変更
- 2台目に自動バックアップの設定
システム構成図
仮想ネットワークの作成
OCIコンソール上で、仮想ネットワーク環境を作成します。以下のパラメータとシステム構成図を参考に、適切に作成します。
- Public Subnet : インスタンス用
- Private Subnet : DBaaS 1台 用
- Internet Gateway
- Service Gateway : DBaaS が自動バックアップする用
- Security List : Ingress を全て削除
- Network Security Group
- 以下の Ingress 通信を許可
- ICMP
- SSH
- TCP1521 (Oracle DB)
- 以下の Ingress 通信を許可
- Route Table
- 0.0.0.0/0 は Internet Gateway
- OCI NRT Object Storage : Service Gateway
DBaaS
1台目のOracleDBを作成
OCIのメニューから、[Bare Metal, VM, and Exadata] へ移動し、[Create DB System] を選びます。
以下のパラメータを入力します。
Data Guard 構成のため、Enterprise Edition 以上のものを選択します。
- Name your DB system : sugidbsystem01
- Hostname prefix : sugihostname01
以下のパラメータを入力します
以下のパラメータを入力します
- Hostname Prefix : sugihostname01
以下のパラメータを入力します。
以下のパラメータを入力します
- Database name : suginm01
以下のパラメータを入力します
作成ボタン押下後、Provisioning が走ります。約1時間15分ほど時間が必要です。
完了となると、緑色のステータスになります。
Data Guard構成
1台目のOracle DB を構成した画面から、Databasesを選択します。
Data Guard Associations から、Enable Data Guard を選択します。
以下のパラメータを入力して、Data Guard 構成のうち2台目を構成します。
なお、2台目側の Oracle DB を構成する時に、Fault Domain は選択できません。
1台目側のOracle DBと同一のAvailability Domain が選択されていると、異なるFault Domain が自動的に選択されます (今回の場合では、Fault Domain 3 が選ばれる)
- DISPLAY NAME : 通常作成するときに指定する、DB system name のこと。sugidbsystem02 を指定する。
- Hostname Prefix : sugihostname02
- Database Name : 指定できない。1台目のDatabase Name が2台目でも同じものが使用される
Data Guard の設定画面上では、PROTECTION MODE は Maximum Performance
と TRANSPORT TYPE は Async
固定となっています。構成完了後、DGMGRL(Data Guard Brokerのコマンド・ユーティリティ) を使うことで、設定変更が可能です。
このタイミングで、仮想ネットワーク上で、Ingress : TCP 1521 を許可していないと、エラーになるので、注意してください。
UPDATINGが走ります
約5分後、DB Systems の一覧に、Data Guard の2台目として 作成中のシステムが表示されます
- 正常終了 : 1時間15分掛かった
- エラーになったとき : 約2時間30分掛かった
約1時間15分待機後、AVAILAVLE状態となります。
詳細画面上で、Data Guard の Role などが表示されています。
2台目側の詳細画面を確認すると、Database Role が、Standby となっています。
また、自動バックアップ機能が Disabled となっており、有効にすることもできませんが、Database Role を Primary へスイッチオーバーすると、設定が出来るようになるため、忘れないように後程設定を行います。
状態の確認
Data Guard を構成しているインスタンスにSSHログインします。Oracle DB を作成した時に指定した 公開鍵に紐づく秘密鍵を使用してSSHログインします。
[opc@client ~]$ ssh opc@sugihostname01.priv01.vcn.oraclevcn.com
Last login: Sun Aug 4 02:00:19 2019 from 10.2.0.2
[opc@sugihostname01 ~]$
なお、Data Guard を構成しているインスタンス上で、root ユーザーへスイッチすることも可能です
[opc@sugihostname01 ~]$ sudo su -
[root@sugihostname01 ~]#
Default で作成されている、oracle ユーザーへスイッチします
[opc@sugihostname01 ~]$ sudo su - oracle
[oracle@sugihostname01 ~]$
DGMGRL(Data Guard Brokerのコマンド・ユーティリティ) がビルドインされています
[oracle@sugihostname01 ~]$ which dgmgrl
/u01/app/oracle/product/18.0.0.0/dbhome_1/bin/dgmgrl
DGMGRLを使って、Data Guard 構成を確認するために、まずは DGMGRL を起動します
[oracle@sugihostname01 ~]$ dgmgrl /
DGMGRL for Linux: Release 18.0.0.0.0 - Production on Sun Aug 4 02:06:15 2019
Version 18.6.0.0.0
Copyright (c) 1982, 2018, Oracle and/or its affiliates. All rights reserved.
Welcome to DGMGRL, type "help" for information.
Connected to "suginm01_nrt1mv"
Connected as SYSDG.
DGMGRL>
Data Guard の Configuration の詳細を確認します。様々な情報が表示されていますが注目すべきは、Data Guard の Member 一覧が表示されています。
DGMGRL> SHOW CONFIGURATION VERBOSE;
Configuration - suginm01_nrt1mv_suginm01_nrt1f
Protection Mode: MaxPerformance
Members:
suginm01_nrt1mv - Primary database <==== 1台目
suginm01_nrt1fr - Physical standby database <==== 2台目
Properties:
FastStartFailoverThreshold = '30'
OperationTimeout = '30'
TraceLevel = 'USER'
FastStartFailoverLagLimit = '30'
CommunicationTimeout = '180'
ObserverReconnect = '0'
FastStartFailoverAutoReinstate = 'TRUE'
FastStartFailoverPmyShutdown = 'TRUE'
BystandersFollowRoleChange = 'ALL'
ObserverOverride = 'FALSE'
ExternalDestination1 = ''
ExternalDestination2 = ''
PrimaryLostWriteAction = 'CONTINUE'
ConfigurationWideServiceName = 'suginm01_CFG'
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS
DGMGRL>
なお、表示されている Member の名前は、OCI のコンソール上ではDatabase Unique Name を見ると確認できます
確認したDatabase Unique Nameを使用して、SHOW DATABASE コマンドを実行すると、Data Guard 構成としての Role が PRIMARYであることを確認できます。
DGMGRL> SHOW DATABASE VERBOSE suginm01_nrt1mv;
Database - suginm01_nrt1mv
Role: PRIMARY
Intended State: TRANSPORT-ON
Instance(s):
suginm01
Properties:
DGConnectIdentifier = 'suginm01_nrt1mv'
ObserverConnectIdentifier = ''
LogXptMode = 'ASYNC'
RedoRoutes = ''
DelayMins = '0'
Binding = 'optional'
MaxFailure = '0'
MaxConnections = '1'
ReopenSecs = '300'
NetTimeout = '30'
RedoCompression = 'DISABLE'
LogShipping = 'ON'
PreferredApplyInstance = ''
ApplyInstanceTimeout = '0'
ApplyLagThreshold = '30'
TransportLagThreshold = '30'
TransportDisconnectedThreshold = '30'
ApplyParallel = 'AUTO'
ApplyInstances = '0'
StandbyFileManagement = 'AUTO'
ArchiveLagTarget = '0'
LogArchiveMaxProcesses = '8'
LogArchiveMinSucceedDest = '1'
DataGuardSyncLatency = '0'
DbFileNameConvert = ''
LogFileNameConvert = ''
FastStartFailoverTarget = ''
InconsistentProperties = '(monitor)'
InconsistentLogXptProps = '(monitor)'
SendQEntries = '(monitor)'
LogXptStatus = '(monitor)'
RecvQEntries = '(monitor)'
PreferredObserverHosts = ''
HostName = 'sugihostname01'
StaticConnectIdentifier = '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=sugihostname01)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=suginm01_nrt1mv_DGMGRL.priv01.vcn.oraclevcn.com)(INSTANCE_NAME=suginm01)(SERVER=DEDICATED)))'
OnlineArchiveLocation = 'LOCATION=USE_DB_RECOVERY_FILE_DEST MANDATORY'
OnlineAlternateLocation = ''
StandbyArchiveLocation = 'LOCATION=USE_DB_RECOVERY_FILE_DEST MANDATORY'
StandbyAlternateLocation = ''
LogArchiveTrace = '0'
LogArchiveFormat = '%t_%s_%r.dbf'
TopWaitEvents = '(monitor)'
SidName = '(monitor)'
Log file locations:
Alert log : /u01/app/oracle/diag/rdbms/suginm01_nrt1mv/suginm01/trace/alert_suginm01.log
Data Guard Broker log : /u01/app/oracle/diag/rdbms/suginm01_nrt1mv/suginm01/trace/drcsuginm01.log
Database Status:
SUCCESS
DGMGRL>
同様に、2台目の Database Unique Name を確認します
SHOW DATABASE コマンドで、2台目の詳細情報を確認します。Data Guard の Role は、PHYSICAL STANDBY であることが確認できます。
DGMGRL> SHOW DATABASE VERBOSE suginm01_nrt1fr;
Database - suginm01_nrt1fr
Role: PHYSICAL STANDBY
Intended State: APPLY-ON
Transport Lag: 0 seconds (computed 8 seconds ago)
Apply Lag: 0 seconds (computed 8 seconds ago)
Average Apply Rate: 2.00 KByte/s
Active Apply Rate: 416.00 KByte/s
Maximum Apply Rate: 575.00 KByte/s
Real Time Query: OFF
Instance(s):
suginm01
Properties:
DGConnectIdentifier = 'suginm01_nrt1fr'
ObserverConnectIdentifier = ''
LogXptMode = 'ASYNC'
RedoRoutes = ''
DelayMins = '0'
Binding = 'optional'
MaxFailure = '0'
MaxConnections = '1'
ReopenSecs = '300'
NetTimeout = '30'
RedoCompression = 'DISABLE'
LogShipping = 'ON'
PreferredApplyInstance = ''
ApplyInstanceTimeout = '0'
ApplyLagThreshold = '30'
TransportLagThreshold = '30'
TransportDisconnectedThreshold = '30'
ApplyParallel = 'AUTO'
ApplyInstances = '0'
StandbyFileManagement = 'AUTO'
ArchiveLagTarget = '0'
LogArchiveMaxProcesses = '8'
LogArchiveMinSucceedDest = '1'
DataGuardSyncLatency = '0'
DbFileNameConvert = ''
LogFileNameConvert = ''
FastStartFailoverTarget = ''
InconsistentProperties = '(monitor)'
InconsistentLogXptProps = '(monitor)'
SendQEntries = '(monitor)'
LogXptStatus = '(monitor)'
RecvQEntries = '(monitor)'
PreferredObserverHosts = ''
HostName = 'sugihostname02'
StaticConnectIdentifier = '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=sugihostname02)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=suginm01_nrt1fr_DGMGRL.priv01.vcn.oraclevcn.com)(INSTANCE_NAME=suginm01)(SERVER=DEDICATED)))'
OnlineArchiveLocation = 'LOCATION=USE_DB_RECOVERY_FILE_DEST MANDATORY'
OnlineAlternateLocation = ''
StandbyArchiveLocation = 'LOCATION=USE_DB_RECOVERY_FILE_DEST MANDATORY'
StandbyAlternateLocation = ''
LogArchiveTrace = '0'
LogArchiveFormat = '%t_%s_%r.dbf'
TopWaitEvents = '(monitor)'
SidName = '(monitor)'
Log file locations:
Alert log : /u01/app/oracle/diag/rdbms/suginm01_nrt1fr/suginm01/trace/alert_suginm01.log
Data Guard Broker log : /u01/app/oracle/diag/rdbms/suginm01_nrt1fr/suginm01/trace/drcsuginm01.log
Database Status:
SUCCESS
DGMGRL>
Data Guard のデータ保護モードをMaxAvailabilityに変更
Data Guard には、コスト・可用性・パフォーマンス・データ保護のバランスをとるために、データ保護モードが3種類用意されています。下の表は3種類の特徴と概要を示したものです
参考元 : https://www.oracle.com/technetwork/jp/content/twp-dataguard-11gr2-134591-ja.pdf
モード | データ損失のリスク | 転送 | スタンバイ・データベースからの確認がない場合の処理 |
---|---|---|---|
最大保護 | データ損失ゼロ 二重障害保護 |
SYNC | トランザクションのREDOがディスクに書き込まれたことを示すスタンバイ・データベースからの確認を受信してから、コミットの成功をアプリケーションに通知します。 |
最大可用性 | ハイブリッド 損失の可能性あり |
SYNC | スタンバイ・データベースからの確認を受信するか、または NET_TIMEOUT しきい値に指定された期間が過ぎたら、いずれの場合もコミットの成功をアプリケーションに通知します。 |
最大パフォーマンス | 最小限のデータ保護 損失の可能性あり |
ASYNC | プライマリはスタンバイからの確認を待つことなく、コミットの成功をアプリケーションに通知します。 |
DGMGRL(Data Guard Brokerのコマンド・ユーティリティ)を使用して、最大可用性(MaxAvailability) モードに変更します
edit database suginm01_nrt1fr set property 'logXptMode'='SYNC';
edit database suginm01_nrt1mv set property 'logXptMode'='SYNC';
edit configuration set protection mode as maxavailability;
実行例
DGMGRL> edit database suginm01_nrt1fr set property 'logXptMode'='SYNC';
Property "logXptMode" updated
DGMGRL> edit database suginm01_nrt1mv set property 'logXptMode'='SYNC';
Property "logXptMode" updated
DGMGRL> edit configuration set protection mode as maxavailability;
Succeeded.
設定変更後の状態を確認します
DGMGRL> SHOW CONFIGURATION VERBOSE;
Configuration - suginm01_nrt1mv_suginm01_nrt1f
Protection Mode: MaxAvailability <============== MaxAvailabilityになっている
Members:
suginm01_nrt1mv - Primary database
suginm01_nrt1fr - Physical standby database
Properties:
FastStartFailoverThreshold = '30'
OperationTimeout = '30'
TraceLevel = 'USER'
FastStartFailoverLagLimit = '30'
CommunicationTimeout = '180'
ObserverReconnect = '0'
FastStartFailoverAutoReinstate = 'TRUE'
FastStartFailoverPmyShutdown = 'TRUE'
BystandersFollowRoleChange = 'ALL'
ObserverOverride = 'FALSE'
ExternalDestination1 = ''
ExternalDestination2 = ''
PrimaryLostWriteAction = 'CONTINUE'
ConfigurationWideServiceName = 'suginm01_CFG'
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS
DGMGRL>
1台目
DGMGRL> SHOW DATABASE VERBOSE suginm01_nrt1mv;
Database - suginm01_nrt1mv
Role: PRIMARY
Intended State: TRANSPORT-ON
Instance(s):
suginm01
Properties:
DGConnectIdentifier = 'suginm01_nrt1mv'
ObserverConnectIdentifier = ''
LogXptMode = 'SYNC' <============== SYNCになっている
省略
2台目
DGMGRL> SHOW DATABASE VERBOSE suginm01_nrt1fr
Database - suginm01_nrt1fr
Role: PHYSICAL STANDBY
Intended State: APPLY-ON
Transport Lag: 0 seconds (computed 1 second ago)
Apply Lag: 0 seconds (computed 1 second ago)
Average Apply Rate: 2.00 KByte/s
Active Apply Rate: 517.00 KByte/s
Maximum Apply Rate: 575.00 KByte/s
Real Time Query: OFF
Instance(s):
suginm01
Properties:
DGConnectIdentifier = 'suginm01_nrt1fr'
ObserverConnectIdentifier = ''
LogXptMode = 'SYNC' <============== SYNCになっている
省略
スイッチオーバーのテスト
DGMGRL(Data Guard Brokerのコマンド・ユーティリティ)からスイッチオーバーの操作が出来ますが、OCI のコンソール画面上からも実行が可能です。
Switchover ボタンをクリックします
パスワードが求められます
2, 3分後に、UPDATING となります
コマンド SHOW CONFIGURATION VERBOSE
の実行結果の下の方に、switchover が発生した status が確認できます。
DGMGRL> SHOW CONFIGURATION VERBOSE;
Configuration - suginm01_nrt1mv_suginm01_nrt1f
Protection Mode: MaxAvailability
Members:
suginm01_nrt1mv - Primary database
suginm01_nrt1fr - Physical standby database
Properties:
FastStartFailoverThreshold = '30'
OperationTimeout = '30'
TraceLevel = 'USER'
FastStartFailoverLagLimit = '30'
CommunicationTimeout = '180'
ObserverReconnect = '0'
FastStartFailoverAutoReinstate = 'TRUE'
FastStartFailoverPmyShutdown = 'TRUE'
BystandersFollowRoleChange = 'ALL'
ObserverOverride = 'FALSE'
ExternalDestination1 = ''
ExternalDestination2 = ''
PrimaryLostWriteAction = 'CONTINUE'
ConfigurationWideServiceName = 'suginm01_CFG'
Fast-Start Failover: DISABLED
Configuration Status:
ORA-16534: switchover, failover or convert operation in progress
DGM-17017: unable to determine configuration status
数分後、Switchover が完了します
DGMGRL> SHOW CONFIGURATION VERBOSE;
Configuration - suginm01_nrt1mv_suginm01_nrt1f
Protection Mode: MaxAvailability
Members:
suginm01_nrt1fr - Primary database <============ 2つが入れ替わっている
suginm01_nrt1mv - Physical standby database <============ 2つが入れ替わっている
Properties:
FastStartFailoverThreshold = '30'
OperationTimeout = '30'
TraceLevel = 'USER'
FastStartFailoverLagLimit = '30'
CommunicationTimeout = '180'
ObserverReconnect = '0'
FastStartFailoverAutoReinstate = 'TRUE'
FastStartFailoverPmyShutdown = 'TRUE'
BystandersFollowRoleChange = 'ALL'
ObserverOverride = 'FALSE'
ExternalDestination1 = ''
ExternalDestination2 = ''
PrimaryLostWriteAction = 'CONTINUE'
ConfigurationWideServiceName = 'suginm01_CFG'
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS
DGMGRL>
[重要] 2台目で自動バックアップの設定
Data Guard 構成をした直後では、2台目の インスタンスに、自動バックアップの設定が出来ませんでした。スイッチオーバーして2台目を Primary にすることによって、自動バックアップの設定を行うことが出来ます。
2台目をPrimaryにした直後の画面から、Configure Automatic Backups を選択します。
60日間で有効にします。
有効にした直後、バックアップが走ります
[Option] 2台目で環境変数設定
Data Guard 2台目のインスタンスでは、Oracle として必要な環境変数 ORACLE_HOME
と ORACLE_SID
が設定されていません。
1台目では設定されていたのですが・・・。
しかたないので、2台目で環境変数の設定を行います
まず、2台目のインスタンスへ SSH ログインして、oracle ユーザーへスイッチをします
[opc@client-6032 ~]$ ssh opc@sugihostname02.priv01.vcn.oraclevcn.com
Last login: Sat Aug 31 13:49:03 2019 from 10.2.0.32
[opc@sugihostname02 ~]$ sudo su - oracle
[oracle@sugihostname02 ~]$
環境変数の設定をします。
export ORACLE_HOME=/u01/app/oracle/product/18.0.0.0/dbhome_1
export ORACLE_SID=suginm01
echo 'export ORACLE_HOME=/u01/app/oracle/product/18.0.0.0/dbhome_1' >> ~/.bashrc
echo 'export ORACLE_SID=suginm01' >> ~/.bashrc
また、Oracle の各種管理で必要なバイナリは、PATH が設定されていないため、これも設定を行います
export PATH=$PATH:/u01/app/18.0.0.0/grid/bin/
echo 'export PATH=$PATH:/u01/app/18.0.0.0/grid/bin/' >> ~/.bashrc
参考URL