はじめに
Oracle Cloud には、Oracle DB を提供するマネージドサービスが存在しています。オンプレミスと同様に、RAC, Data Guard といったOracle DB の高可用性構成をとることが出来ます。Data Guard は、Oracle DB の Primary(Active) - Secondary(Standby) 構成を実現することが出来る機能です。
これを利用することで、例えば Oracle Cloud Infrastructure(以下OCI)のリージョン間や、Availability Domain 間、Fault Domain 間でOracleDBの可用性構成を実現することが可能です。Data Guard 構成の Primary で障害が発生した場合、Standby 側を Primary へ昇格するためのフェールオーバーを行うことで、障害に耐えることが出来ます。
デフォルトの構成では、障害時に手動でフェールオーバーを行う必要がありますが、Data Guard Broker を使うことで、自動フェールオーバー(fast-start failover) をすることが出来ます。
今回の記事では、自動フェールオーバーを構成するための手順を確認していきます。
Data Guard Broker を構成するには、Oracle Client Administrator を完全インストールする必要がありますが、今回はEnterprise Manager を Data Guard Broker として利用します。Enterprise Manager を利用するのは以下の2点の理由があります。
- MarketPlace から簡単に構築することが可能
- Enterprise Manager で提供している SQLモニターを初めとした様々な便利機能を利用可能
OCI上で Data Guard の構築は、次の記事を参考にしてください
https://qiita.com/sugimount/items/eb96a906ca71e2a2418e
OCI上で Enterprise Manager の構築は、次の記事を参考にしてください
https://qiita.com/sugimount/items/96f2349b9938b3642f90
Data Guard Broker の構成手順については、以下のDocumentを参考にしています。
https://docs.oracle.com/cd/E96517_01/dgbkr/examples-using-data-guard-broker-DGMGRL-utility.html#GUID-AAE5EA1A-53A2-4D8D-BF59-A2856B38C99D
構成図
Data Guard Broker 設定
DBパラメータの調整
Data Guard Broker の構成を行う前に、Data Guard としてのデータベースパラメータを調整します。
長時間の停止後でも回復が可能となるように、UNDO_RETENTION
およびDB_FLASHBACK_RETENTION_TARGET
初期化パラメータが十分に大きな値に変更します。
Enterprise Manager に SSH ログインして、oracle ユーザーへスイッチ
sudo su - oracle
Data Guard を構成するためのコマンド dgmgrl
は以下に格納されています。これを起動します。
/u01/app/database/product/bin/dgmgrl
実行例
[oracle@emcc ~]$ /u01/app/database/product/bin/dgmgrl
DGMGRL for Linux: Release 19.0.0.0.0 - Production on Sun Aug 18 04:11:54 2019
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
Welcome to DGMGRL, type "help" for information.
DGMGRL>
OCI の DBaaS コンソールから、接続文字列を確認します。DB Connection のボタンをクリックします。
Copy を押します
DBaaS の Primary Role インスタンスに、sysユーザーで接続します。パスワードが求められるので、DBaaS インスタンスを作成した時に指定したパスワードを入力します。
CONNECT sys@sugihostname01.priv01.vcn.oraclevcn.com:1521/suginm01_nrt1mv.priv01.vcn.oraclevcn.com;
DBaaS 側で Data Guard 構成がされているので、その Config を確認します
SHOW CONFIGURATION VERBOSE;
実行例
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:
SUCCESS
DGMGRL>
Data Base の表示。Primary Role
DGMGRL> SHOW DATABASE VERBOSE suginm01_nrt1mv;
Database - suginm01_nrt1mv
Enterprise Manager Name: suginm01_sugihostname01
Role: PRIMARY
Intended State: TRANSPORT-ON
Instance(s):
suginm01
Properties:
DGConnectIdentifier = 'suginm01_nrt1mv'
ObserverConnectIdentifier = ''
LogXptMode = 'SYNC'
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>
Secondary Role
DGMGRL> SHOW DATABASE VERBOSE suginm01_nrt1fr;
Database - suginm01_nrt1fr
Enterprise Manager Name: suginm01_nrt1fr.priv01.vcn.oraclevcn.com_1
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: 495.00 KByte/s
Maximum Apply Rate: 1.08 MByte/s
Real Time Query: OFF
Instance(s):
suginm01
Properties:
DGConnectIdentifier = 'suginm01_nrt1fr'
ObserverConnectIdentifier = ''
LogXptMode = 'SYNC'
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>
DBaaS で作成したインスタンスへ ログインし、FLASHBACK 機能が有効になっているか確認します。SQL PLUS で DBaaS インスタンスに接続します
[oracle@sugihostname01 ~]$ sqlplus / as sysdba
以下のコマンドを実行します
SQL> SELECT FLASHBACK_ON FROM V$DATABASE;
FLASHBACK_ON
------------------
YES
SQL>
長時間の停止後でも回復が可能となるように、UNDO_RETENTION
およびDB_FLASHBACK_RETENTION_TARGET
初期化パラメータを変更します。
- DB_FLASHBACK_RETENTION_TARGET を、
1440
分(1日) から4320
分(3日)に変更 - UNDO_RETENTIONを、
900
秒(15分)から、3600
秒(1時間)に変更
現在の設定値を確認
SQL> SHOW PARAMETER DB_FLASHBACK_RETENTION_TARGET;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_flashback_retention_target integer 1440
SQL>
現在の設定値を確認
SQL> SHOW PARAMETER UNDO;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
_gc_undo_affinity boolean TRUE
temp_undo_enabled boolean FALSE
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1
SQL>
プライマリ、セカンダリ両方のインスタンスで、パラメータ変更コマンドをSQL*PLUSで実施します。
まずはプライマリインスタンスを変更します。
UNDO_RETENTIONの最低保存時間パラメータを変更します。
ALTER SYSTEM SET UNDO_RETENTION=3600 SCOPE=SPFILE;
実行例
SQL> ALTER SYSTEM SET UNDO_RETENTION=3600 SCOPE=SPFILE;
System altered.
SQL>
Oracle DB インスタンスを、一時的に停止します。(1分くらいかかります)
SHUTDOWN IMMEDIATE;
実行例
SQL> SHUTDOWN IMMEDIATE;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
データベースをマウントし、開始(OPEN)しない状態でインスタンスを起動します
STARTUP MOUNT;
実行例
SQL> STARTUP MOUNT;
ORACLE instance started.
Total System Global Area 1.6106E+10 bytes
Fixed Size 8915160 bytes
Variable Size 2281701376 bytes
Database Buffers 1.3791E+10 bytes
Redo Buffers 24637440 bytes
Database mounted.
SQL>
UNDOのパラメータを確認して、undo_retentionが3600秒へ変更されているか確認します
SHOW PARAMETER UNDO;
実行例
SQL> SHOW PARAMETER UNDO;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
_gc_undo_affinity boolean TRUE
temp_undo_enabled boolean FALSE
undo_management string AUTO
undo_retention integer 3600
undo_tablespace string UNDOTBS1
SQL>
DB_FLASHBACK_RETENTION_TARGET を 4320分(3日) に変更します
ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET=4320 SCOPE=BOTH;
実行例
SQL> ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET=4320 SCOPE=BOTH;
System altered.
SQL>
変更されたか確認
SHOW PARAMETER DB_FLASHBACK_RETENTION_TARGET;
実行例
SQL> SHOW PARAMETER DB_FLASHBACK_RETENTION_TARGET;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_flashback_retention_target integer 4320
SQL>
データベースを OPEN します
ALTER DATABASE OPEN;
実行例
SQL> ALTER DATABASE OPEN;
Database altered.
SQL>
セカンダリ側を変更するために、一時的にスイッチオーバーを実施します。実施完了後、プライマリ側と同様の作業を実施し、以下2個のパラメータを変更します。
- DB_FLASHBACK_RETENTION_TARGET を、
1440
分(1日) から4320
分(3日)に変更 - UNDO_RETENTIONを、
900
秒(15分)から、3600
秒(1時間)に変更
**注意。セカンダリ側で SHUTDOWN IMMEDIATE;
を実行すると、接続できなくなるので、セカンダリ側のOS oracle ユーザーでログインし、以下のコマンドでログインすると良いです **
export ORACLE_HOME=/u01/app/oracle/product/18.0.0.0/dbhome_1
export ORACLE_SID=suginm01
/u01/app/18.0.0.0/grid/bin/sqlplus / as sysdba
ファスト・スタート・フェイルオーバーを有効化
Data Guard Broker のログ出力先を作成
Enterprise Manager の oracle ユーザーで、Broker 用のログ出力ディレクトリを作成します
mkdir /home/oracle/broker
tnsnames.ora の編集
Data Guard Broker を構成するために、tnsnames.ora を編集する必要があります。
編集する文字列は、OCIコンソール上からコピーすることが可能です。
OCI の コンソールから、作成した Oracle DB インスタンスの詳細画面を開きます。
次に、database の名前を選択します
DB Connection を選択します
Copy を選択して、値を控えます。これを、Primary, Standby の両方とも行います。
次に、Enterprise Manager にSSHログインし、デフォルトで設定されているORACLE_HOME の場所を確認します
[oracle@emcc ~]$ env | grep ORACLE_HOME
ORACLE_HOME=/u01/app/database/product
ORACLE_HOME配下のtnsnames.ora を編集します
vim /u01/app/database/product/network/admin/tnsnames.ora
OCIコンソールからコピーした内容をもとに、末尾に追記を行います。suginm01_nrt1mv
や suginm01_nrt1fr
の文字列は、OCI コンソール上に表示されているDatabase Unique Name を指定します。
suginm01_nrt1mv =
(DESCRIPTION=
(CONNECT_TIMEOUT=5)
(TRANSPORT_CONNECT_TIMEOUT=3)
(RETRY_COUNT=3)
(ADDRESS_LIST=
(LOAD_BALANCE=on)
(ADDRESS=
(PROTOCOL=TCP)
(HOST=10.2.100.5)
(PORT=1521)
)
)
(CONNECT_DATA=
(SERVICE_NAME=suginm01_nrt1mv.priv01.vcn.oraclevcn.com)
)
)
suginm01_nrt1fr =
(DESCRIPTION=
(CONNECT_TIMEOUT=5)
(TRANSPORT_CONNECT_TIMEOUT=3)
(RETRY_COUNT=3)
(ADDRESS_LIST=
(LOAD_BALANCE=on)
(ADDRESS=
(PROTOCOL=TCP)
(HOST=10.2.100.6)
(PORT=1521)
)
)
(CONNECT_DATA=
(SERVICE_NAME=suginm01_nrt1fr.priv01.vcn.oraclevcn.com)
)
)
有効化
Enterprise Manager で、dgmgrl コマンドを再度実行し、接続を行います。
実行例
[oracle@emcc ~]$ /u01/app/database/product/bin/dgmgrl
DGMGRL for Linux: Release 19.0.0.0.0 - Production on Sun Aug 18 04:11:54 2019
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
Welcome to DGMGRL, type "help" for information.
DGMGRL>
DBaaS の Primary Role インスタンスに接続。パスワードが求められるので、DBaaS インスタンスを作成した時に指定したパスワードを入力します。
CONNECT sys@10.2.100.5:1521/suginm01_nrt1mv.priv01.vcn.oraclevcn.com;
有効にする前に、Fast Start Failover の詳細設定を確認します。
SHOW FAST_START FAILOVER;
実行例。Disabled になっていることが確認できます。
DGMGRL> SHOW FAST_START FAILOVER;
Fast-Start Failover: Disabled <=============== Disabledとなっている
Protection Mode: MaxAvailability
Lag Limit: 30 seconds
Threshold: 30 seconds
Active Target: (none)
Potential Targets: (none)
Observer: (none)
Shutdown Primary: TRUE
Auto-reinstate: TRUE
Observer Reconnect: (none)
Observer Override: FALSE
Configurable Failover Conditions
Health Conditions:
Corrupted Controlfile YES
Corrupted Dictionary YES
Inaccessible Logfile NO
Stuck Archiver NO
Datafile Write Errors YES
Oracle Error Conditions:
(none)
DGMGRL>
以下のコマンドで、Fast Start Failover を有効化します
ENABLE FAST_START FAILOVER;
実行例
DGMGRL> ENABLE FAST_START FAILOVER;
Enabled in Zero Data Loss Mode.
DGMGRL>
確認します
DGMGRL> SHOW FAST_START FAILOVER;
Fast-Start Failover: Enabled in Zero Data Loss Mode <=============== Enabled となっている
Protection Mode: MaxAvailability
Lag Limit: 30 seconds
Threshold: 30 seconds
Active Target: suginm01_nrt1fr
Potential Targets: "suginm01_nrt1fr"
suginm01_nrt1fr valid
Observer: (none)
Shutdown Primary: TRUE
Auto-reinstate: TRUE
Observer Reconnect: (none)
Observer Override: FALSE
Configurable Failover Conditions
Health Conditions:
Corrupted Controlfile YES
Corrupted Dictionary YES
Inaccessible Logfile NO
Stuck Archiver NO
Datafile Write Errors YES
Oracle Error Conditions:
(none)
DGMGRL>
プライマリーと、セカンダリーの詳細設定を表示し、Fast Start Failover のターゲットが、相互に設定されているかを確認します。
SHOW DATABASE VERBOSE suginm01_nrt1fr FastStartFailoverTarget;
SHOW DATABASE VERBOSE suginm01_nrt1mv FastStartFailoverTarget;
実行例
DGMGRL> SHOW DATABASE VERBOSE suginm01_nrt1fr FastStartFailoverTarget;
FastStartFailoverTarget = 'suginm01_nrt1mv'
DGMGRL>
DGMGRL> SHOW DATABASE VERBOSE suginm01_nrt1mv FastStartFailoverTarget;
FastStartFailoverTarget = 'suginm01_nrt1fr'
DGMGRLを使用して接続している現在のコネクションを、オブザーバーとして起動し続けるコマンドを発行します。
(以下のコマンドを実行すると、ターミナルが戻らないので注意)
- OBSERBER名 : emcc
- FILE :
/home/oracle/broker/fsfo.dat
- LOGFILE :
/home/oracle/broker/observer.log
START OBSERVER emcc FILE IS /home/oracle/broker/fsfo.dat LOGFILE IS /home/oracle/broker/observer.log
実行例
DGMGRL> START OBSERVER emcc FILE IS /home/oracle/broker/fsfo.dat LOGFILE IS /home/oracle/broker/observer.log
[W000 2019-08-18T08:08:07.830+00:00] FSFO target standby is suginm01_nrt1fr
Observer 'emcc' started
memo : OBSERVER を停止する方法。別のターミナルからDGMGRLを開き、以下のコマンドを押すことで、オブザーバーを停止できます
STOP OBSERVER emcc
オブザーバーが起動できたら、DGMGRL に制御が戻らないので、そのままターミナルを閉じます。
再度Enterprise Manager に接続をして、DGMGRLに接続を行います。
オブザーバーが正常に構成できているか、確認を行います
SHOW CONFIGURATION VERBOSE;
実行例
DGMGRL> SHOW CONFIGURATION VERBOSE;
Configuration - suginm01_nrt1mv_suginm01_nrt1f
Protection Mode: MaxAvailability
Members:
suginm01_nrt1mv - Primary database
suginm01_nrt1fr - (*) Physical standby database
(*) Fast-Start Failover target <=================== 表示されていること
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: Enabled in Zero Data Loss Mode
Lag Limit: 30 seconds
Threshold: 30 seconds
Active Target: suginm01_nrt1fr
Potential Targets: "suginm01_nrt1fr"
suginm01_nrt1fr valid
Observer: emcc <=================== emcc と表示されていること
Shutdown Primary: TRUE
Auto-reinstate: TRUE
Observer Reconnect: (none)
Observer Override: FALSE
Configuration Status:
SUCCESS <=================== SECCESS と表示されていること
DGMGRL>
fast-start failover テスト
Primaryの停止
Data Guard Broker のログは、Enterprise Manager の以下のディレクトリに出力するように設定しています。動作を確認するために、tail で常時観察をします
tail -f /home/oracle/broker/observer.log
Primary Role のインスタンスにSSHログインをして、停止します
[opc@client ~]$ ssh opc@sugihostname01.priv01.vcn.oraclevcn.com
Last login: Sun Aug 18 07:24:49 2019 from 10.2.0.2
[opc@sugihostname01 ~]$ sudo su -
[root@sugihostname01 ~]# shutdown -h now
[root@sugihostname01 ~]#
Broadcast message from opc@sugihostname01
(/dev/pts/0) at 8:16 ...
The system is going down for halt NOW!
シャットダウン押下後、Data Guard Broker に以下のログが出力されます。Fast-Start Failoverが発生し、正常終了していることが確認できます。
[W000 2019-08-18T08:16:18.860+00:00] Primary database cannot be reached.
[W000 2019-08-18T08:16:18.860+00:00] Fast-Start Failover threshold has not exceeded. Retry for the next 30 seconds
[W000 2019-08-18T08:16:19.861+00:00] Try to connect to the primary.
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
Unable to connect to database using suginm01_nrt1mv
[W000 2019-08-18T08:16:19.890+00:00] Primary database cannot be reached.
[W000 2019-08-18T08:16:20.890+00:00] Try to connect to the primary.
ORA-12541: TNS:no listener
Unable to connect to database using suginm01_nrt1mv
[W000 2019-08-18T08:16:20.895+00:00] Primary database cannot be reached.
[W000 2019-08-18T08:16:21.895+00:00] Try to connect to the primary.
ORA-12541: TNS:no listener
Unable to connect to database using suginm01_nrt1mv
[W000 2019-08-18T08:16:21.899+00:00] Primary database cannot be reached.
[W000 2019-08-18T08:16:22.900+00:00] Try to connect to the primary.
ORA-12541: TNS:no listener
Unable to connect to database using suginm01_nrt1mv
[W000 2019-08-18T08:16:45.988+00:00] Primary database cannot be reached.
[W000 2019-08-18T08:16:45.988+00:00] Fast-Start Failover threshold has not exceeded. Retry for the next 3 seconds
[W000 2019-08-18T08:16:46.988+00:00] Try to connect to the primary.
ORA-12541: TNS:no listener
Unable to connect to database using suginm01_nrt1mv
[W000 2019-08-18T08:16:46.991+00:00] Primary database cannot be reached.
[W000 2019-08-18T08:16:46.991+00:00] Fast-Start Failover threshold has not exceeded. Retry for the next 2 seconds
[W000 2019-08-18T08:16:47.991+00:00] Try to connect to the primary.
ORA-12541: TNS:no listener
Unable to connect to database using suginm01_nrt1mv
[W000 2019-08-18T08:16:47.995+00:00] Primary database cannot be reached.
[W000 2019-08-18T08:16:47.995+00:00] Fast-Start Failover threshold has not exceeded. Retry for the next 1 second
[W000 2019-08-18T08:16:48.995+00:00] Try to connect to the primary.
ORA-12541: TNS:no listener
Unable to connect to database using suginm01_nrt1mv
[W000 2019-08-18T08:16:48.999+00:00] Primary database cannot be reached.
[W000 2019-08-18T08:16:48.999+00:00] Fast-Start Failover threshold has expired.
[W000 2019-08-18T08:16:49.041+00:00] Try to connect to the standby.
[W000 2019-08-18T08:16:49.041+00:00] Making a last connection attempt to primary database before proceeding with Fast-Start Failover.
[W000 2019-08-18T08:16:49.041+00:00] Check if the standby is ready for failover.
ORA-12541: TNS:no listener
Unable to connect to database using suginm01_nrt1mv
[W000 2019-08-18T08:16:49.075+00:00] Fast-Start Failover is not possible because primary last contacted the standby within FastStartFailoverThreshold seconds.
[W000 2019-08-18T08:16:52.075+00:00] Making a last connection attempt to primary database before proceeding with Fast-Start Failover.
[W000 2019-08-18T08:16:52.075+00:00] Check if the standby is ready for failover.
ORA-12541: TNS:no listener
Unable to connect to database using suginm01_nrt1mv
[S002 2019-08-18T08:16:52.131+00:00] Fast-Start Failover started...
2019-08-18T08:16:52.131+00:00
Initiating Fast-Start Failover to database "suginm01_nrt1fr"...
[S002 2019-08-18T08:16:52.131+00:00] Initiating Fast-start Failover.
Performing failover NOW, please wait...
Failover succeeded, new primary is "suginm01_nrt1fr"
2019-08-18T08:17:43.409+00:00
[S002 2019-08-18T08:17:43.409+00:00] Fast-Start Failover finished...
[W000 2019-08-18T08:17:43.409+00:00] Failover succeeded. Restart pinging.
[W000 2019-08-18T08:17:43.443+00:00] Primary database has changed to suginm01_nrt1fr.
[W000 2019-08-18T08:17:43.445+00:00] Try to connect to the primary.
[W000 2019-08-18T08:17:43.445+00:00] Try to connect to the primary suginm01_nrt1fr.
[W000 2019-08-18T08:17:44.638+00:00] Connection to the primary restored!
[W000 2019-08-18T08:17:44.650+00:00] The standby suginm01_nrt1mv needs to be reinstated
[W000 2019-08-18T08:17:44.650+00:00] Try to connect to the new standby suginm01_nrt1mv.
[W000 2019-08-18T08:17:46.650+00:00] Disconnecting from database suginm01_nrt1fr.
ORA-12170: TNS:Connect timeout occurred
Unable to connect to database using suginm01_nrt1mv
[W000 2019-08-18T08:18:14.694+00:00] Try to connect to the new standby suginm01_nrt1mv.
Enterprise Manager のDGMGRLを使用して、DBaaS の Primary Role へ昇格した 元Secondary Roleのインスタンスに接続します。パスワードが求められるので、DBaaS インスタンスを作成した時に指定したパスワードを入力します。
CONNECT sys@10.2.100.6:1521/suginm01_nrt1fr.priv01.vcn.oraclevcn.com
詳細確認。
suginm01_nrt1fr
が Primary Role へ昇格していることが確認。
元Primary だった suginm01_nrt1mv
は Disable となっている
DGMGRL> SHOW CONFIGURATION VERBOSE;
Configuration - suginm01_nrt1mv_suginm01_nrt1f
Protection Mode: MaxAvailability
Members:
suginm01_nrt1fr - Primary database <=========== Primary となっている
Warning: ORA-16824: multiple warnings, including fast-start failover-related warnings, detected for the database
suginm01_nrt1mv - (*) Physical standby database (disabled) <=========== disabled となっている
ORA-16661: the standby database needs to be reinstated
(*) Fast-Start Failover target
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: Enabled in Zero Data Loss Mode
Lag Limit: 30 seconds
Threshold: 30 seconds
Active Target: suginm01_nrt1mv
Potential Targets: "suginm01_nrt1mv"
suginm01_nrt1mv invalid - member is disabled
Observer: emcc
Shutdown Primary: TRUE
Auto-reinstate: TRUE
Observer Reconnect: (none)
Observer Override: FALSE
Configuration Status:
WARNING
DGMGRL>
OCI のコンソール上では、フェイルオーバーが発生したことは検知できていません。(OCIコンソールではなく、別の方法でモニタリングを行うと良いでしょう)
- sugidbsystem01 :
suginm01_nrt1mv
(元Primary で、Shutdown されているシステム) - sugidbsystem02 :
suginm01_nrt1fr
(元Secondaryで、現在はPrimaryへFast Start Failover したシステム)
詳細画面を見ると、OCIコンソール上では、両方とも Primary Roleとして認識されている。
suginm01_nrt1mv
(元Primary で、Shutdown されているシステム)
suginm01_nrt1fr
(元Secondaryで、現在はPrimaryへFast Start Failover したシステム)
元Primaryの復旧
元PrimaryのインスタンスをReboot して復旧させます。
完全な障害が発生した場合はRebootでは復旧しないため、その場合は、Standby を再構成する必要があると想定しています。
OCIコンソール上からRebootを押します。
OKを押します。
Stopping状態になるので、待機します。
Data Guard Broker の log では、元Primary Role サーバーが復旧してきて、Secondary として再度参加(Reinstatement)することを試みます。
1回目の試みでは Fail したようですが、2回目の試みで正常に参加出来ました。
[W000 2019-08-18T08:38:44.517+00:00] Try to connect to the new standby suginm01_nrt1mv.
[W000 2019-08-18T08:38:45.521+00:00] Connection to the new standby restored!
[W000 2019-08-18T08:38:47.521+00:00] Try to connect to the primary suginm01_nrt1fr.
[W000 2019-08-18T08:38:48.526+00:00] Connection to the primary restored!
[W000 2019-08-18T08:38:49.526+00:00] Wait for new primary to be ready to reinstate.
[W000 2019-08-18T08:38:50.526+00:00] New primary is now ready to reinstate.
[W000 2019-08-18T08:38:50.526+00:00] Issuing REINSTATE command.
2019-08-18T08:38:50.526+00:00
Initiating reinstatement for database "suginm01_nrt1mv"...
Reinstating database "suginm01_nrt1mv", please wait...
[W000 2019-08-18T08:39:17.578+00:00] The standby suginm01_nrt1mv is ready to be a FSFO target
Warning: ORA-16713: The Oracle Data Guard broker command timed out.
Reinstatement of database "suginm01_nrt1mv" failed
2019-08-18T08:39:44.418+00:00
[W000 2019-08-18T08:39:44.613+00:00] Failed to reinstate database suginm01_nrt1mv. Will retry later.
[W000 2019-08-18T08:40:14.658+00:00] Try to connect to the new standby suginm01_nrt1mv.
[W000 2019-08-18T08:40:15.662+00:00] Connection to the new standby restored!
[W000 2019-08-18T08:40:17.662+00:00] Try to connect to the primary suginm01_nrt1fr.
[W000 2019-08-18T08:40:18.666+00:00] Connection to the primary restored!
[W000 2019-08-18T08:40:19.666+00:00] Wait for new primary to be ready to reinstate.
[W000 2019-08-18T08:40:20.666+00:00] New primary is now ready to reinstate.
[W000 2019-08-18T08:40:20.666+00:00] Issuing REINSTATE command.
2019-08-18T08:40:20.666+00:00
Initiating reinstatement for database "suginm01_nrt1mv"...
Reinstating database "suginm01_nrt1mv", please wait...
Reinstatement of database "suginm01_nrt1mv" succeeded
2019-08-18T08:40:43.138+00:00
[W000 2019-08-18T08:40:43.704+00:00] Successfully reinstated database suginm01_nrt1mv.
DGMGRL から、CONFIGURATIONを確認します。suginm01_nrt1mv
が、standby として復旧していることがわかります。
DGMGRL> SHOW CONFIGURATION VERBOSE;
Configuration - suginm01_nrt1mv_suginm01_nrt1f
Protection Mode: MaxAvailability
Members:
suginm01_nrt1fr - Primary database
suginm01_nrt1mv - (*) Physical standby database <=========== 復旧
(*) Fast-Start Failover target
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: Enabled in Zero Data Loss Mode
Lag Limit: 30 seconds
Threshold: 30 seconds
Active Target: suginm01_nrt1mv
Potential Targets: "suginm01_nrt1mv"
suginm01_nrt1mv valid
Observer: emcc
Shutdown Primary: TRUE
Auto-reinstate: TRUE
Observer Reconnect: (none)
Observer Override: FALSE
Configuration Status:
SUCCESS
DGMGRL>
OCIコンソールで再起動した Node が、正常に Availavle と見えています
Standby として追加されたため、OCIコンソールでも正常にStandbyとして認識されています
新Primaryの停止
では次に、元Standbyで新Primaryの DBaaS インスタンスの停止を行い、再度 fast-start failover が発生するかをテストします。
Data Guard Broker のログは、Enterprise Manager の以下のディレクトリに出力するように設定しています。動作を確認するために、tail で常時観察をします
tail -f /home/oracle/broker/observer.log
新Primary Role のインスタンスにSSHログインをして、停止します
[opc@client ~]$ ssh opc@sugihostname02.priv01.vcn.oraclevcn.com
Last login: Sun Aug 18 08:20:46 2019 from 10.2.0.2
[opc@sugihostname02 ~]$
[opc@sugihostname02 ~]$
[opc@sugihostname02 ~]$ sudo su -
[root@sugihostname02 ~]# shutdown -h now
Broadcast message from opc@sugihostname02
(/dev/pts/0) at 8:52 ...
The system is going down for halt NOW!
[root@sugihostname02 ~]#
シャットダウン押下後、Data Guard Broker に以下のログが出力されます。Fast-Start Failoverが発生し、正常終了していることが確認できます。
[W000 2019-08-18T08:52:32.753+00:00] Fast-Start Failover threshold has not exceeded. Retry for the next 30 seconds
[W000 2019-08-18T08:52:33.753+00:00] Try to connect to the primary.
ORA-12541: TNS:no listener
Unable to connect to database using suginm01_nrt1fr
[W000 2019-08-18T08:52:33.761+00:00] Primary database cannot be reached.
[W000 2019-08-18T08:52:34.761+00:00] Try to connect to the primary.
ORA-12541: TNS:no listener
Unable to connect to database using suginm01_nrt1fr
[W000 2019-08-18T08:52:34.764+00:00] Primary database cannot be reached.
[W000 2019-08-18T08:52:35.765+00:00] Try to connect to the primary.
ORA-12541: TNS:no listener
Unable to connect to database using suginm01_nrt1fr
[W000 2019-08-18T08:52:35.768+00:00] Primary database cannot be reached.
[W000 2019-08-18T08:52:36.768+00:00] Try to connect to the primary.
ORA-12541: TNS:no listener
Unable to connect to database using suginm01_nrt1fr
[W000 2019-08-18T08:52:59.862+00:00] Primary database cannot be reached.
[W000 2019-08-18T08:52:59.862+00:00] Fast-Start Failover threshold has not exceeded. Retry for the next 3 seconds
[W000 2019-08-18T08:53:00.863+00:00] Try to connect to the primary.
ORA-12541: TNS:no listener
Unable to connect to database using suginm01_nrt1fr
[W000 2019-08-18T08:53:00.866+00:00] Primary database cannot be reached.
[W000 2019-08-18T08:53:00.866+00:00] Fast-Start Failover threshold has not exceeded. Retry for the next 2 seconds
[W000 2019-08-18T08:53:01.867+00:00] Try to connect to the primary.
ORA-12541: TNS:no listener
Unable to connect to database using suginm01_nrt1fr
[W000 2019-08-18T08:53:01.870+00:00] Primary database cannot be reached.
[W000 2019-08-18T08:53:01.870+00:00] Fast-Start Failover threshold has not exceeded. Retry for the next 1 second
[W000 2019-08-18T08:53:02.870+00:00] Try to connect to the primary.
ORA-12541: TNS:no listener
Unable to connect to database using suginm01_nrt1fr
[W000 2019-08-18T08:53:02.874+00:00] Primary database cannot be reached.
[W000 2019-08-18T08:53:02.874+00:00] Fast-Start Failover threshold has expired.
[W000 2019-08-18T08:53:02.874+00:00] Try to connect to the standby.
[W000 2019-08-18T08:53:02.874+00:00] Making a last connection attempt to primary database before proceeding with Fast-Start Failover.
[W000 2019-08-18T08:53:02.874+00:00] Check if the standby is ready for failover.
ORA-12541: TNS:no listener
Unable to connect to database using suginm01_nrt1fr
[S005 2019-08-18T08:53:02.938+00:00] Fast-Start Failover started...
2019-08-18T08:53:02.938+00:00
Initiating Fast-Start Failover to database "suginm01_nrt1mv"...
[S005 2019-08-18T08:53:02.938+00:00] Initiating Fast-start Failover.
Performing failover NOW, please wait...
Failover succeeded, new primary is "suginm01_nrt1mv"
2019-08-18T08:53:26.185+00:00
[S005 2019-08-18T08:53:26.185+00:00] Fast-Start Failover finished...
[W000 2019-08-18T08:53:26.185+00:00] Failover succeeded. Restart pinging.
[W000 2019-08-18T08:53:26.220+00:00] Primary database has changed to suginm01_nrt1mv.
Enterprise Manager の、DGMGRLから、DBaaS の Primary Role へ昇格した、インスタンスに接続。
パスワードが求められるので、DBaaS インスタンスを作成した時に指定したパスワードを入力します。
CONNECT sys@10.2.100.5:1521/suginm01_nrt1mv.priv01.vcn.oraclevcn.com;
詳細確認。
suginm01_nrt1mv
が Primary Role へ昇格していることが確認。
suginm01_nrt1fr
は Disable となっている
DGMGRL> SHOW CONFIGURATION VERBOSE;
Configuration - suginm01_nrt1mv_suginm01_nrt1f
Protection Mode: MaxAvailability
Members:
suginm01_nrt1mv - Primary database
Warning: ORA-16824: multiple warnings, including fast-start failover-related warnings, detected for the database
suginm01_nrt1fr - (*) Physical standby database (disabled)
ORA-16661: the standby database needs to be reinstated
(*) Fast-Start Failover target
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: Enabled in Zero Data Loss Mode
Lag Limit: 30 seconds
Threshold: 30 seconds
Active Target: suginm01_nrt1fr
Potential Targets: "suginm01_nrt1fr"
suginm01_nrt1fr invalid - member is disabled
Observer: emcc
Shutdown Primary: TRUE
Auto-reinstate: TRUE
Observer Reconnect: (none)
Observer Override: FALSE
Configuration Status:
WARNING
DGMGRL>
元Primaryの復旧
sugidbsystem02 (suginm01_nrt1fr) を OCI コンソール上で、Reboot します
OKを押します。
Stopping 状態になります
Data Guard Broker の log では、元Primary Role サーバーが復旧してきて、Secondary として再度参加(Reinstatement)することを試みます。
今回は、1回目の試みで正常に参加出来ました。
[W000 2019-08-18T09:04:57.761+00:00] Try to connect to the new standby suginm01_nrt1fr.
[W000 2019-08-18T09:04:58.765+00:00] Connection to the new standby restored!
[W000 2019-08-18T09:05:00.765+00:00] Try to connect to the primary suginm01_nrt1mv.
[W000 2019-08-18T09:05:01.769+00:00] Connection to the primary restored!
[W000 2019-08-18T09:05:02.770+00:00] Wait for new primary to be ready to reinstate.
[W000 2019-08-18T09:05:03.770+00:00] New primary is now ready to reinstate.
[W000 2019-08-18T09:05:03.770+00:00] Issuing REINSTATE command.
2019-08-18T09:05:03.770+00:00
Initiating reinstatement for database "suginm01_nrt1fr"...
Reinstating database "suginm01_nrt1fr", please wait...
[W000 2019-08-18T09:05:33.817+00:00] The standby suginm01_nrt1fr is ready to be a FSFO target
Reinstatement of database "suginm01_nrt1fr" succeeded
2019-08-18T09:05:57.751+00:00
[W000 2019-08-18T09:05:57.847+00:00] Successfully reinstated database suginm01_nrt1fr.
正常に復旧しています
DGMGRL> SHOW CONFIGURATION VERBOSE;
Configuration - suginm01_nrt1mv_suginm01_nrt1f
Protection Mode: MaxAvailability
Members:
suginm01_nrt1mv - Primary database
suginm01_nrt1fr - (*) Physical standby database
(*) Fast-Start Failover target
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: Enabled in Zero Data Loss Mode
Lag Limit: 30 seconds
Threshold: 30 seconds
Active Target: suginm01_nrt1fr
Potential Targets: "suginm01_nrt1fr"
suginm01_nrt1fr valid
Observer: emcc
Shutdown Primary: TRUE
Auto-reinstate: TRUE
Observer Reconnect: (none)
Observer Override: FALSE
Configuration Status:
SUCCESS
DGMGRL>
参考URL
DGMGRLコマンドライン・インタフェースの使用例
https://docs.oracle.com/cd/E96517_01/dgbkr/examples-using-data-guard-broker-DGMGRL-utility.html#GUID-D9018A5C-8C7A-4F6C-A7D3-B14E5AF7D4BC
Oracle Data Guard による高可用性
https://www.slideshare.net/techblogyahoo/oracle-data-guard-48172431
Oracle Cloud:Data Guard構成してみてみた
https://qiita.com/shirok/items/2eb68c3777f34a57f632
参考になりそう?
https://www.dbarj.com.br/2014/12/oracle-data-guard-e-oracle-wallet/