6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Oracle Cloud] Data Guard で自動フェールオーバー(Fast-Start Failover) をやってみた

Last updated at Posted at 2019-08-18

はじめに

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

構成図

1566128630540.png

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 のボタンをクリックします。

1566101830430.png

Copy を押します

1566101870252.png

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 インスタンスの詳細画面を開きます。

1566129597880.png

次に、database の名前を選択します

1566129631292.png

DB Connection を選択します

1566129662628.png

Copy を選択して、値を控えます。これを、Primary, Standby の両方とも行います。

1566129702217.png

次に、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_nrt1mvsuginm01_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 したシステム)

1566116820030.png

詳細画面を見ると、OCIコンソール上では、両方とも Primary Roleとして認識されている。
suginm01_nrt1mv (元Primary で、Shutdown されているシステム)

1566117084263.png

suginm01_nrt1fr (元Secondaryで、現在はPrimaryへFast Start Failover したシステム)

1566117134182.png

元Primaryの復旧

元PrimaryのインスタンスをReboot して復旧させます。
完全な障害が発生した場合はRebootでは復旧しないため、その場合は、Standby を再構成する必要があると想定しています。
OCIコンソール上からRebootを押します。

1566117238151.png

OKを押します。

1566117251378.png

Stopping状態になるので、待機します。

1566117278965.png

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 と見えています

1566117802209.png

Standby として追加されたため、OCIコンソールでも正常にStandbyとして認識されています

1566117911934.png

新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 します

1566118723857.png

OKを押します。

1566117251378.png

Stopping 状態になります

1566118829601.png

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/

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?