Oracle Cloud Infrastructureドキュメント

データベースCLIでOracle Data Guardを使用

Oracle Cloud InfrastructureでData Guardを設定して使用するには、データベースCLIではなくコンソールを使用することをお薦めします。 情報と指示については、「Oracle Data Guardの使用」を参照してください。

ノート

このトピックは、Exadata DBシステムには適用されません。 ネイティブOracle Databaseユーティリティとコマンドを使用して、Exadata DBシステムでData Guardを手動で構成できますが、この項では、Exadata DBシステムでは使用できないdbcliを使用してプライマリ・データベースとスタンバイ・データベースを設定する方法について説明します。 詳細は、「Data Guardの概念と管理」 (バージョン18.112.212.111.2)を参照してください。

 

このトピックでは、データベースCLIを使用して、Oracle Cloud Infrastructureでファスト・スタート・フェイルオーバー(FSFO)を使用してData Guardを設定する方法について説明します。 次の項では、プライマリ・データベースとスタンバイ・データベースを準備し、プライマリ・データベースからREDOデータを送信してスタンバイ・データベースに適用するようにData Guardを構成する方法について説明します。

ノート

このトピックでは、Data GuardおよびFSFOに精通していることを前提としています。 それらの詳細については、Oracle Document Portalのドキュメントを参照してください。

前提条件

このトピックの手順を実行するには、プライマリ・データベースとスタンバイ・データベースについて次の情報が必要です。

  • db_name (or oracle_sid)
  • db_unique_name
  • oracleホーム・ディレクトリ(またはデータベース・ホーム)
データベース情報を検索するには

プライマリDBシステムの作成

プライマリDBシステムをまだお持ちでない場合は、「ベア・メタルおよび仮想マシンDBシステムの管理」の説明に従って作成してください。 DBシステムには初期データベースが含まれます。 DBシステムで使用可能なdbcli create-databaseコマンドを使用して、追加のデータベースを作成できます。

スタンバイDBシステムの作成

ノート

スタンバイ・データベースは、プライマリ・データベースと同じdb_nameを持つ必要がありますが、別のdb_unique_nameを持つ必要があります。 スタンバイとプライマリで同じデータベース名を使用する場合は、dbcli create-databaseコマンドを実行する前に、dbcli delete-databaseコマンドを使用してスタンバイDBシステムからデータベースを削除する必要があります。 データベースの削除と作成には数分かかる場合があります。 dbcliコマンドは、rootユーザーとして実行する必要があります。

  1. 「ベア・メタルおよび仮想マシンDBシステムの管理」の説明に従ってスタンバイDBシステムを作成し、DBシステムがプロビジョニングを終了して使用可能になるのを待ちます。

    プライマリDBシステムとは別の「可用性ドメイン」でスタンバイDBシステムを作成し、可用性と災害リカバリ目的で作成することができます(これは強く推奨されます)。 プライマリDBシステム・クラウド・ネットワークでスタンバイDBシステムを作成して、両方のシステムが単一のルーティング可能なネットワークになるようにすることができます。

  2. DBシステムへのSSH。

    ssh -i <private_key_path> opc@<db_system_ip_address> 
  3. opcとしてログインし、rootユーザーにsudoします。 ハイフンでsudo su -を使用してルート・ユーザー・プロファイルを呼び出すと、PATHがdbcliディレクトリ(/opt/oracle/dcs/bin)に設定されます。

    login as: opc
    			
    [opc@dbsys ~]$ sudo su - 
  4. DBシステムには初期データベースが含まれますが、--instanceonlyパラメータとともにdbcli create-databaseコマンドを使用してスタンバイ・データベースを作成する必要があります。 このパラメータは、データベース・ストレージ構造のみを作成し、nomountモードでデータベースを開始します(他のデータベース・ファイルは作成されません)。

    --instanceonlyを使用する場合は、--dbname--adminpasswordの両方のパラメータが必要です。混乱を避けるために、プライマリ・データベースのdbnameとadminパスワードと一致する必要があります。

    次のサンプル・コマンドは、管理パスワードの入力を要求し、dbnameという名前のデータベースのストレージ構造を作成します。

    [root@dbsys ~]# dbcli create-database --dbname <same as primary dbname> --databaseUniqueName <different from primary uniquename> --instanceonly --adminpassword

    プラガブル・データベースを使用している場合は、--cdb パラメータも指定します。

    完全なコマンド構文については、dbcli create-databaseを参照してください。

  5. dbcli create-databaseコマンドがスタンバイ・データベースを作成するまで数分間待ちます。

    dbcli list-jobsコマンドを使用して、作成ジョブが正常に実行されたことを確認してから、dbcli list-databasesコマンドでデータベースが構成されていることを確認できます。

プライマリDBシステムの準備

プライマリDBシステムを準備するには、静的リスナーを構成し、tnsnames.oraを更新し、いくつかのデータベース構成とパラメータを構成する必要があります。

静的リスナーの構成

RMANおよびData Guard Brokerで使用するティック・リスナーを作成します。

  1. SSHをプライマリDBシステムに接続し、opcまたはrootユーザーとしてログインし、grid OSユーザーにsudoします。

    sudo su - grid
  2. /u01/app/<version>/grid/network/admin/listener.oraを編集し、次のコンテンツを追加します。 ここに示す最初の静的リスナーはオプションです。 2番目のDGMGRL静的リスナーは、バージョン12.1以降のデータベースではオプションですが、バージョン11.2データベースでは必須です。

    SID_LIST_LISTENER=
      (SID_LIST=
        (SID_DESC=
        (SDU=65535)
        (GLOBAL_DBNAME = <primary_db_unique_name>.<primary_db_domain>)
        (SID_NAME = <primary_oracle_sid>)
        (ORACLE_HOME=<oracle_home_directory>)
        (ENVS="TNS_ADMIN=<oracle_home_directory>/network/admin")
        )
        (SID_DESC=
        (SDU=65535)
    	(GLOBAL_DBNAME = <primary_db_unique_name>_DGMGRL.<primary_db_domain>)
        (SID_NAME = <primary_oracle_sid>)
        (ORACLE_HOME=<oracle_home_directory>)
        (ENVS="TNS_ADMIN=<oracle_home_directory>/network/admin")
        )
      )
  3. 変更を保存し、リスナーを再起動します。

    $ srvctl stop listener
    $ srvctl start listener

tnsnames.oraへのネット・サービス名の追加

oracleユーザーとして、$ORACLE_HOME/network/admin/tnsnames.oraを編集し、スタンバイ・データベースのネット・サービス名を追加します。

<standby db_unique_name> =
  (DESCRIPTION =
    (SDU=65535)		
    (ADDRESS = (PROTOCOL = TCP)(HOST = <standby_server>.<domain>) (PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = <standby db_unique_name>.<standby db_domain>)
    )
  )

上記のサンプルでは、名前解決が機能しており、<standby_server>.<domain>がプライマリ・データベースで解決可能であることを前提としています。 IPアドレスが単一のクラウド・ネットワーク(VCN)内でルーティング可能である場合、スタンバイ・サーバーのプライベートIPアドレスを使用することもできます。

プライマリ・データベース・パラメータの構成

ヒント

プライマリ・ホストとスタンバイ・ホストのディレクトリ構造が異なる場合は、log_file_name_convertパラメータなど、ここでは説明していない追加パラメータを設定する必要があります。 異なるディレクトリ構造を持つホスト用のスタンド・バイを作成する方法の詳細については、RMANのマニュアルを参照してください。

  1. oracleユーザーとして、自動スタンバイ・ファイルの管理を有効にします。

    SQL> alter system set standby_file_management=AUTO;
  2. ブローカの構成ファイルの名前とロケーションを特定します。 これに使用されるコマンドは、データベース・ストレージのタイプによって異なります。 データベース・ストレージ・タイプが不明な場合は、DBシステムでdbcli list-databasesコマンドを使用してください。

    ACFSデータベース・ストレージの場合は、次のコマンドを使用してブローカ構成ファイルを構成します。

    SQL> alter system set dg_broker_config_file1='/u02/app/oracle/oradata/<Primary db_unique_name>/dbs/dr1<Primary db_unique_name>.dat';
    SQL> alter system set dg_broker_config_file2='/u02/app/oracle/oradata/<Primary db_unique_name>/dbs/dr2<Primary db_unique_name>.dat'; 

    ASMデータベース・ストレージの場合は、次のコマンドを使用してブローカ構成ファイルを設定します。

    SQL> alter system set dg_broker_config_file1='+DATA/<Primary db_unique_name>/dr1<db_unique_name>.dat';
    SQL> alter system set dg_broker_config_file2='+DATA/<Primary db_unique_name>/dr2<db_unique_name>.dat';
  3. データベースのブローカDMONプロセスを有効にします。

    SQL> alter system set dg_broker_start=true;
  4. すべてのデータベース・トランザクションのデータベース・ログを強制します。

    SQL> alter database force logging ;
  5. オンラインREDOログ(ORL)に基づいてスタンバイREDOログ(SRL)を追加します。 新しく導入されたDBシステムでは、サイズ1073741824の3つのORLが存在するため、同じサイズの4つのSRLを作成します。

    以下の問合せを使用して、ORLの数とサイズ(バイト単位)を判断できます。

    SQL> select group#, bytes from v$log;
    
        GROUP# BYTES
    ---------- ----------
             1 1073741824
             2 1073741824
             3 1073741824

    すべてのORLは同じサイズでなければなりません。

    SRLはORLと同じサイズでなければならないが、少なくとも1つはORLよりもSRLが多くなければならない。 上記の例では、3つのORLがあるため、4つのSRLが必要です。 したがって、現行のREDOログに1を加えたものを指定し、REDOログと同じサイズを使用します。

    SQL> alter database add standby logfile thread 1 size <size>;

    SRLグループには1つのメンバーしか存在しません(デフォルトでは、SRLグループごとにメンバーが1つだけのDBシステムが作成されます)。 これを確実にするために、次の構文でファイルの名前を付けることができます。

    alter database add standby logfile thread 1 group 4 (<logfile name with full path>) size 1073741824, group 5(<logfile name with full path>) size 1073741824 ...

    ASM/OMF構成の場合、上記のコマンドは<logfile name with full path>ではなくdiskgroupを使用します。

    alter database add standby logfile thread 1 group 4 (+RECO) size 1073741824, group 5(+RECO) size 1073741824 ...
    ヒント

    ORLとSRLは、ログ・スイッチが10分ごとに頻繁に発生しないようにサイズを変更する必要があります。 これにはアプリケーションの知識が必要であり、デプロイメント後に調整する必要があるかもしれません。 詳細は、「スタンバイREDOログの使用と適切なサイズの構成」を参照してください。

  6. 正しい数のSRLを作成したことを確認してください。

    SQL> select group#, bytes from v$standby_log;
  7. データベースがARCHIVELOGモードであることを確認してください。

    SQL> archive log list
  8. データベースFLASHBACKを有効にします。 db_flashback_retention_targetの最小推奨値は120分です。

    SQL> alter database flashback on ;
    SQL> alter system set db_flashback_retention_target=120;
  9. データベースが新しく作成された場合は、アーカイブをアクティブにするために単一のスイッチREDOログを実行します。 (RMAN複製を実行する前に、少なくとも1つのログをアーカイブする必要があります)。

    SQL> alter system switch logfile;

スタンバイ・データベースの準備

スタンバイ・データベースを準備する前に、スタンバイのデータベース・ホームがプライマリ・データベースと同じバージョンであることを確認してください。 (プライマリ・データベースとスタンバイ・データベースの両方が同じデータベース・バージョンで新しく作成されている場合は、データベース・ホームも同じになります。 そうでない場合は、同じバージョンのデータベース・ホームを作成します。 dbcli list-dbhomesコマンドを使用してバージョンを確認し、dbcli create-dbhomeコマンドを使用して必要に応じて新しいデータベース・ホームを作成することができます。

スタンバイDBシステムを準備するには、静的リスナーを構成し、tnsnames.oraを更新し、TDE Walletを構成し、一時パスワード・ファイルを作成し、接続を確認し、RMAN DUPLICATEを実行し、FLASHBACKを有効にしてからDatabase Serviceを作成する必要があります。

静的リスナーの構成

RMANおよびData Guard Brokerで使用するティック・リスナーを作成します。

  1. SSHをスタンバイDBシステムに接続し、opcまたはrootユーザーとしてログインし、grid OSユーザーにsudoします。

    sudo su - grid
  2. /u01/app/<db_version>/grid/network/admin/listener.ora.に次のコンテンツを追加

    RMAN DUPLICATEには、以下に示す最初の静的リスナーが必要です。 2番目のDGMGRLティック・リスナーは、データベース・バージョン12.2.0.1および12.1.0.2ではオプションですが、データベース・バージョン11.2.0.4では必須です。

    SID_LIST_LISTENER=
      (SID_LIST=
        (SID_DESC=
        (SDU=65535)
        (GLOBAL_DBNAME = <standby db_unique_name>.<standby db_domain>)
        (SID_NAME = <standby oracle_sid>)
    (ORACLE_HOME=<oracle home directory>) (ENVS="TNS_ADMIN=<oracle home directory>/network/admin") ) (SID_DESC= (SDU=65535) (GLOBAL_DBNAME = <standby db_unique_name>_DGMGRL.<standby db_domain>) (SID_NAME = <standby oracle_sid>) (ORACLE_HOME=<oracle home directory>) (ENVS="TNS_ADMIN=<oracle home directory>/network/admin") ) )
  3. リスナーを再起動します。

    $ srvctl stop listener
    $ srvctl start listener
  4. 静的リスナーが使用可能であることを確認します。 以下のサンプル出力はデータベース・バージョン12.1.0.2用です。 この時点では、...status UNKNOWNメッセージが必要であることに注意してください。

    $ lsnrctl status
    
    LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 29-SEP-2016 21:09:25
    
    Copyright (c) 1991, 2014, Oracle.  All rights reserved.
    
    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))
    STATUS of the LISTENER
    ------------------------
    Alias                     LISTENER
    Version                   TNSLSNR for Linux: Version 12.1.0.2.0 - Production
    Start Date                29-SEP-2016 21:09:19
    Uptime                    0 days 0 hr. 0 min. 5 sec
    Trace Level               off
    Security                  ON: Local OS Authentication
    SNMP                      OFF
    Listener Parameter File   /u01/app/12.1.0.2/grid/network/admin/listener.ora
    Listener Log File         /u01/app/grid/diag/tnslsnr/dg2/listener/alert/log.xml
    Listening Endpoints Summary...
      (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.0.1.24)(PORT=1521)))
    Services Summary...
    Service "dg2_phx2hx.oratst.org" has 1 instance(s).
      Instance "dg2", status UNKNOWN, has 1 handler(s) for this service...
    Service "dg2_phx2hx_DGMGRL.oratst.org" has 1 instance(s).
      Instance "dg2", status UNKNOWN, has 1 handler(s) for this service...
    The command completed successfully

tnsnames.oraへのネット・サービス名の追加

oracleユーザーとして、スタンバイ・データベースのネット・サービス名を$ORACLE_HOME/network/admin/tnsnames.oraに追加します。$ORACLE_HOMEは、スタンバイ・データベースが実行されているデータベース・ホームです。

<Primary db_unique_name> =
  (DESCRIPTION =
    (SDU=65535)
    (ADDRESS = (PROTOCOL = TCP)(HOST = <primary_server>.<domain>) (PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = <primary db_unique_name).<primary db_domain>)
    )
  )
 
<Standby db_unique_name> =
  (DESCRIPTION =
    (SDU=65535)
    (ADDRESS = (PROTOCOL = TCP)(HOST = <standby_server>.<domain>) (PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = <standby db_unique_name>.<db_domain>)
    )
  )

スタンバイ・システムへのTDEウォレットのコピー

プライマリDBシステムからSCPを使用してTDEウォレット・ファイルをスタンバイDBシステムにコピーします。 次のサンプル・コマンドでは、SCPコマンドがoracle OSユーザーによって実行されており、oracleの秘密キーが作成され、SCPが実行されているホスト上に存在することを前提としています。

$ scp -i <private key> primary_server:/opt/oracle/dcs/commonstore/wallets/tde/<primary db_unique_name>/* standby_server:/opt/oracle/dcs/commonstore/wallets/tde/<standby db_unique_name>

スタンバイ・システム構成の設定

oracleユーザーとして、データベース・バージョン11.2.0.4の次のディレクトリを作成します。 このステップは、バージョン12.2.0.1およびバージョン12.1.0.2ではオプションです。

[oracle@dbsys ~]$ mkdir  -pv /u03/app/oracle/redo/<standby db_unique_name uppercase>/controlfile

監査ファイルの宛先の作成

oracleユーザーとして、監査ファイルの宛先として使用する次のディレクトリを作成します。

[oracle@dbsys ~]$ mkdir -p /u01/app/oracle/admin/<db_name>/adump

それ以外の場合は、後で使用するRMAN duplicateコマンドが失敗します。

一時パスワード・ファイルの作成

oracleユーザーとして、一時パスワード・ファイルを作成します。

[oracle@dbsys ~]$ orapwd file=$ORACLE_HOME/dbs/orapw<standby oracle_sid>    password=<admin password for primary> entries=5

パスワードは、プライマリ・データベースの管理パスワードと同じでなければなりません。 そうでなければ、以下のRMAN重複ステップは失敗: RMAN-05614: Passwords for target and auxiliary connections must be the same when using active duplicate.

スタンバイ・データベースが使用可能であることの確認

  1. oracleユーザーとして、環境変数を設定します。

    [oracle@dbsys ~]$ . oraenv
    <enter the db_name>
  2. $ORACLE_HOME/dbs/init<standby sid_name>.oraを次の内容に置き換えます:

    db_name=<Primary db_name>
    db_unique_name=<standby db_unique_name>
    db_domain=<standby db_domain>
  3. スタンバイからspfileを削除します。

    
    /u02/app/oracle/oradata/<standby db_unique_name>/dbs/spfile$ORACLE_SID.ora 

    データベースはspfileが指定されていないnomountモードで起動する必要がありますが、元のinitファイルにはspfileパラメータが含まれているため、RMAN重複ステップが機能しなくなります。

  4. ORACLE_UNQNAME環境変数をDB_UNIQUE_NAMEを指すように設定します。

    $ export ORACLE_UNQNAME =db_unique_name

    重要

    このステップを実行しないと、ウォレットは開かれず、後続のステップでRMAN DUPLICATEコマンドを実行すると失敗します。

  5. 先に使用されたdbcli create-database --instanceonlyコマンドは、スタンバイ・データベースを読取り/書込みモードでプライマリとして開きます。そのため、データベースを停止してから、以下のステップに進んでください。

    $ sqlplus / as sysdba
    SQL> shutdown immediate
  6. nomountモードでデータベースを起動します。

    SQL> startup nomount

データベース接続の確認

プライマリ・データベースとスタンバイ・データベースの間の接続を確認します。

  1. リスナー・ポート1521が、プライマリおよびスタンバイDBシステムで使用されるセキュリティ・リストでオープンされていることを確認します。 詳細は、「DBシステムのセキュリティ・リストの更新」を参照してください。

  2. プライマリ・データベースから、スタンバイ・データベースに接続します。

    $ sqlplus sys/<password>@<standby net service name> as sysdba
  3. スタンバイ・データベースから、プライマリ・データベースに接続します。

    $ sqlplus sys/<password>@<primary net service name> as sysdba

RMAN DUPLICATEコマンドの実行

oracleユーザーとして、スタンバイDBシステムでRMAN DUPLICATEコマンドを実行します。

プライマリ・データベースが大きい場合は、追加のチャネルを割り当ててパフォーマンスを向上させることができます。 新しくインストールされたデータベースの場合、通常、1つのチャネルで2〜3分でデータベースの複製が実行されます。

RMAN DUPLICATEコマンドによって生成されたエラーがないことを確認します。 エラーが発生した場合は、RMAN DUPLICATEの一部として$ORACLE_HOME/dbsで生成された場合は、init.oraファイル(spfileではなく)を使用してデータベースを再起動します。

次の例では、特に指定しない限り、<Standby db_unique_name>には小文字を使用してください。

ACFSストレージ・レイアウトの場合は、次のコマンドを実行します。

$ rman target sys/<password>@<primary alias>  auxiliary sys/<password>@<standby alias> log=rman.out
                  
RMAN> run { allocate channel prim1 type disk;
            allocate auxiliary channel sby type disk;
            duplicate target database for standby from active database
            dorecover
            spfile
            parameter_value_convert '/<Primary db_unique_name>/','/<Standby db_unique_name>/','/<Primary db_unique_name uppercase>/','/<Standby db_unique_name uppercase >/'
            set db_unique_name='<Standby db_unique_name>'
            set db_create_file_dest='/u02/app/oracle/oradata/<Standby db_unique_name>'
            set dg_broker_config_file1='/u02/app/oracle/oradata/<Standby db_unique_name>/dbs/dr1<Standby db_unique_name>.dat'
            set dg_broker_config_file2='/u02/app/oracle/oradata/<Standby db_unique_name>/dbs/dr2<Standby db_unique_name>.dat'
            set dispatchers ='(PROTOCOL=TCP) (SERVICE=<Standby db_unique_name>XDB)'
            set instance_name='<Standby db_unique_name>'
            ;
           }

ASMストレージ・レイアウトの場合は、次のコマンドを実行します。

$ rman target sys/<password>@<primary alias>  auxiliary sys/<password>@<standby alias> log=rman.out
  
RMAN> run { allocate channel prim1 type disk;
            allocate auxiliary channel sby type disk;
            duplicate target database for standby from active database
            dorecover
            spfile
            parameter_value_convert '/<Primary db_unique_name>/','/<Standby db_unique_name>/','/<Primary db_unique_name uppercase>/','/<Standby db_unique_name uppercase>/'
            set db_unique_name='<Standby db_unique_name>'           
            set dg_broker_config_file1='+DATA/<Standby db_unique_name>/dr1<Standby db_unique_name>.dat'
            set dg_broker_config_file2='+DATA/<Standby db_unique_name>/dr2<Standby db_unique_name>.dat'
            set dispatchers ='(PROTOCOL=TCP) (SERVICE=<Standby db_unique_name>XDB)'
            set instance_name='<Standby db_unique_name>'  
            ;
          }

データベースFLASHBACKの有効化

  1. Data Guardのベスト・プラクティスとして、フラッシュバックを有効にし、プライマリ・データベースとスタンバイ・データベースの両方で、db_flashback_retention_targetを120分以上に設定します。

    SQL> alter database flashback on;
    SQL> alter system set db_flashback_retention_target=120;
  2. スタンバイ・データベースが正しく作成されていることを確認してください。

    SQL> select FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE,SWITCHOVER_STATUS, DATAGUARD_BROKER, PROTECTION_MODE from v$database ;

データベース・サービスの作成

srvctlを使用して、スタンバイ・データベース用のDatabase Serviceを作成することをお薦めします。

ACFSストレージ・レイアウト用。

  1. 共有ディレクトリを作成し、spfileファイルをそこにコピーします。

    $ mkdir -pv /u02/app/oracle/oradata/<Standby db_unique_name>/dbs
    $ cp $ORACLE_HOME/dbs/spfile<standby oracle_sid>.ora /u02/app/oracle/oradata/<Standby db_unique_name>/dbs
  2. 既存のDatabase Serviceを停止して削除します。

    $ srvctl stop database -d <standby db_unique_name>
    $ srvctl remove database -d <standby db_unique_name>
  3. Database Serviceを作成します。

    $ srvctl add database -d <standby db_unique_name> -n <standby db_name> -o $ORACLE_HOME -c SINGLE -p '/u02/app/oracle/oradata/<standby db_unique_name>/dbs/spfile<standby db_name>.ora'
    -x <standby hostname> -s "READ ONLY" -r PHYSICAL_STANDBY -i <db_name>
    $ srvctl setenv database -d <standby db_unique_name> -t "ORACLE_
    UNQNAME=<standby db_unique_name>"
    $ srvctl config database -d <standby db_unique_name>
  4. データベース・サービスを起動します。

    $ srvctl start database -d <standby db_unique_name>
  5. $ORACLE_HOME/dbsからファイルをクリーンアップします。

    $ rm $ORACLE_HOME/dbs/spfile<standby oracle_sid>.ora
    $ rm $ORACLE_HOME/dbs/init<standby oracle_sid>.ora
  6. $ORACLE_HOME/dbs/init<standby oracle_sid>.oraファイルを作成して、spfileファイルの新しいロケーションを参照します。

    SPFILE='/u02/app/oracle/oradata/<standby db_unique_name>/dbs/spfile<standby db_name>.ora'
  7. スタンバイ・データベースを停止し、srvctlを使用してスタンバイ・データベースを起動します。

    srvctl stop database -d <standby db_unique_name>
    srvctl start database -d <standby db_unique_name>

ASMストレージ・レイアウト用。

  1. +DATAの下にspfileファイルを生成することを検討してください。
    SQL> create pfile='init<standby oracle_sid>.ora' from spfile ;
    SQL> create spfile='+DATA' from pfile='init<standby oracle_sid>.ora' ;
  2. 既存のDatabase Serviceを停止して削除します。

    $ srvctl stop database -d <standby db_unique_name>
    $ srvctl remove database -d <standby db_unique_name>
  3. Database Serviceを作成します。

    $ srvctl add database -d <standby db_unique_name> -n <standby db_name>   -o $ORACLE_HOME -c SINGLE  -p '+DATA/<standby db_unique_name>/PARAMETERFILE/spfile.xxx.xxxxxx'
    -x <standby hostname> -s "READ ONLY" -r PHYSICAL_STANDBY -i <db_name>
    $ srvctl setenv database -d <standby db_unique_name> -t "ORACLE_UNQNAME=<standby db_unique_name>"
    $ srvctl config database -d <standby db_unique_name>
  4. データベース・サービスを起動します。

    $ srvctl start database -d <standby db_unique_name>
  5. $ORACLE_HOME/dbsからファイルをクリーンアップします。

    $ rm $ORACLE_HOME/dbs/init<standby oracle_sid>.ora
    $ rm $ORACLE_HOME/dbs/spfile<standby oracle_sid>.ora
  6. $ORACLE_HOME/dbs/init<standby oracle_sid>.oraファイルを作成して、spfileファイルの新しいロケーションを参照します。

    SPFILE='+DATA/<standby db_unique_name>/PARAMETERFILE/spfile.xxx.xxxxxx'
  7. srvctlを使用してデータベースを停止し、スタンバイ・データベースを起動します。

    $ srvctl start database -d <standby db_unique_name>

Data Guardの構成

Data Guardの構成を完了し、プライマリ・データベースからREDO転送を有効にし、スタンバイ・データベースでREDO適用するには、次のステップを実行します。

  1. プライマリまたはスタンバイDBシステムからdgmgrlコマンド・ライン・ユーティリティを実行し、sys資格証明を使用してプライマリ・データベースに接続します。

    DGMGRL> connect sys/<sys password>@<primary tns alias>
  2. Data Guard構成を作成し、プライマリ・データベースとスタンバイ・データベースを識別します。

    DGMGRL> create configuration mystby as primary database is <primary db_unique_name> connect identifier is <primary tns alias>;
    add database <standby db_unique_name> as connect identifier is <standby tns alias> maintained as physical;
  3. Data Guard構成を有効にします。

    DGMGRL> enable configuration;
  4. Data Guardの設定が正しく行われたことを確認します。 プライマリ・データベースとスタンバイ・データベースのbothに次のSQLを実行します。

    SQL> select FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS, DATAGUARD_BROKER, PROTECTION_MODE from v$database;
  5. Data Guardプロセスがスタンバイ・データベースで開始されていることを確認します。

    SQL> select PROCESS,PID,DELAY_MINS from V$MANAGED_STANDBY;
  6. プライマリとスタンバイのパラメータ構成を確認します。

    SQL> show parameter log_archive_dest_
    SQL> show parameter log_archive_config
    SQL> show parameter fal_server
    SQL> show parameter log_archive_format
  7. Data Guard構成が動作していることを確認します。 具体的には、再発送と再実行の適用が機能していることと、スタンバイがプライマリの後ろに不当に遅れていないことを確認してください。

    DGMGRL> show configuration verbose
    DGMGRL> show database verbose <standby db_unique_name>
    DGMGRL> show database verbose <primary db_unique_name>

    矛盾、エラー、または警告を解決する必要があります。 また、プライマリでトランザクションを実行して、それがスタンバイで表示されていることを確認することもできます。

  8. 両方向のスイッチオーバーとフェイルオーバーを実行して、Data Guard構成が期待どおりに機能していることを確認します。 各操作の後にshow configurationを実行し、エラーまたは警告がないことを確認してください。

    警告

    このステップは、裁量に基づいてオプションです。 何らかの理由で構成が有効でない場合は、スイッチオーバーまたはフェイルオーバーが失敗し、プライマリ・データベースを起動するのが困難または不可能な場合があります。 プライマリのリカバリが必要な場合があり、可用性に影響します。

    DGMGRL> switchover to <standby db_unique_name>
    DGMGRL> switchover to <primary db_unique_name>
    #connect to standby before failover:

    DGMGRL> connect sys/<sys password>@<standby db_unique_name> DGMGRL> failover to <standby db_unique_name> DGMGRL> reinstate database <primary db_unique_name>
    #connect to primary before failover:

    DGMGRL> connect sys/<sys password>@<primary db_unique_name>
    DGMGRL> failover to <primary db_unique_name> DGMGRL> reinstate database <standby db_unique_name>

オブザーバの構成(オプション)

高い可用性と耐久性のためのベスト・プラクティスは、プライマリ、スタンバイ、およびオブザーバを別々の「可用性ドメイン」で実行することです。 オブザーバは、特定のターゲット・スタンバイ・データベースにフェイルオーバーするかどうかを決定します。 オブザーバに使用されるサーバーには、Oracle ClientおよびOracleのSQL NETおよびBrokerを含むOracle Client Administratorソフトウェアが必要です。

  1. 前に説明したように、プライマリ・データベースとスタンバイ・データベースの両方にTNS別名名を構成し、両方のデータベースへの接続を確認します。

  2. 保護モードをmaxavailabilityまたはmaxperformanceに変更します(maxprotectionはFSFOではサポートされていません)。

    maxavailabilityを有効にするには:

    DGMGRL> edit database <standby db_unique_name> set property 'logXptMode'='SYNC';
    DGMGRL> edit database <primary db_unique_name> set property 'logXptMode'='SYNC';
    DGMGRL> edit configuration set protection mode as maxavailability;

    maxperformanceを有効にするには:

    DGMGRL> edit configuration set protection mode as maxperformance;
    DGMGRL> edit database <standby db_unique_name> set property 'logXptMode'='ASYNC'; DGMGRL> edit database <primary db_unique_name> set property 'logXptMode'='ASYNC';

    maxperformanceの場合、FastStartFailoverLaglimitプロパティは、デフォルトで許容されるデータ損失の最大量を30秒に制限します。

  3. 次のプロパティも考慮する必要があります。 show configuration verboseを実行して現在の値を確認します。

    • FastStartFailoverPmyShutdown
    • FastStartFailoverThreshold
    • FastStartFailoverTarget
    • FastStartFailoverAutoReinstate

    (show configurationを実行すると、オブザーバが起動するまで次のエラーが発生 : Warning : ORA-16819: fast-start failover observer not started。)

  4. Brokerからのファスト・スタート・フェイルオーバーを有効にします:

    DGMGRL> Enable fast_start failover
  5. ファスト・スタート・フェイルオーバーおよび関連する設定を確認します。

    DGMGRL> show fast_start failover
  6. ブローカからオブザーバを起動します(フォアグラウンドで実行されますが、バックグラウンドで実行することもできます)。

    DGMGRL> start observer
  7. ファスト・スタート・フェイルオーバーが有効であり、エラーまたは警告なしで有効であることを確認します。

    DGMGRL> show configuration verbose
  8. フェイルオーバーを常に両方向でテストし、すべてが期待通りに機能していることを確認します。 FSFOが正常に実行されていることを確認するには、プライマリ・データベースのシャットダウンを中止します。

    オブザーバは、スタンバイ・データベースへのフェイルオーバーを開始する必要があります。 保護モードがmaxprotectionに設定されている場合、FastStartFailoverLaglimit値に基づいてデータの損失が発生する可能性があります。