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

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

データベースCLIのかわりにコンソールを使用して、Oracle Cloud InfrastructureでData Guardを設定および操作することをお薦めします。

ノート:

この記事では、Data GuardおよびFSFOに習熟している読者を想定しています。詳細は、DB SystemでのOracle Data Guardの使用を参照してください。

前提条件

このトピックの手順を実行するには、プライマリ・データベースおよびスタンバイ・データベースに関する次の情報が必要になります。

  • db_name (またはoracle_sid)
  • db_unique_name
  • oracleホーム・ディレクトリ(またはデータベース・ホーム)

データベース情報の検索

このトピックで後述する説明に従って、プライマリDBシステムおよびスタンバイDBシステムを起動し、データベースを作成した後は、これらのシステムでCLIを使用して、必要なデータベース情報を検索できます。

  1. DBシステムにSSH接続します。
    ssh -i <private_key_path> opc@<db_system_ip_address>
  2. opcとしてログインし、sudorootユーザーに切り替えます。ハイフンを含むsudo su -を使用して、rootユーザーのプロファイルを起動します。これによって、PATHがdbcliディレクトリ(/opt/oracle/dcs/bin)に設定されます。
    sudo su -
  3. db_name (またはoracle_sid)およびdb_uniqueNameを見つけるには、dbcli list-databases -jコマンドを実行します。
    dbcli list-databases -j
    出力:
    [ {
      "id" : "80ad855a-5145-4f8f-a08f-406c5e4684ff",
      "name" : "dbtst",
      "dbName" : "dbtst",
      "databaseUniqueName" : "dbtst_phx1cs",
      "dbVersion" : "12.1.0.2",
      "dbHomeId" : "2efe7af7-0b70-4e9b-ba8b-71f11c6fe287",
      "instanceOnly" : false,
       .
       .
       .  
  4. oracleホーム・ディレクトリ(またはデータベース・ホーム)を見つけるには、dbcli list-dbhomesコマンドを実行します。DBシステムに複数のデータベース・ホームがある場合は、前述のdbcli list-databases -jコマンド出力の"dbHomeId"と一致するものを使用します。
    dbcli list-dbhomes
    出力:
    ID                                       Name                 DB Version                               Home Location                                 Status
    ---------------------------------------- -------------------- ---------------------------------------- --------------------------------------------- ----------
    2efe7af7-0b70-4e9b-ba8b-71f11c6fe287     OraDB12102_home1     12.1.0.2.160719 (23739960, 23144544)     /u01/app/oracle/product/12.1.0.2/dbhome_1     Configured
    33ae99fe-5413-4392-88da-997f3cd24c0f     OraDB11204_home1     11.2.0.4.160719 (23054319, 23054359)     /u01/app/oracle/product/11.2.0.4/dbhome_1     Configured

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

プライマリDBシステムがまだない場合は、DB Systemの作成の概要の説明に従って作成します。DBシステムには初期データベースが含められます。DBシステムで使用可能なdatabaseコマンドを使用して、追加のデータベースを作成できます。

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

ノート:

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

  1. DB Systemの作成の概要の説明に従ってスタンバイDBシステムを作成し、DBシステムがプロビジョニングを完了して使用可能になるまで待ちます。

    可用性およびディザスタ・リカバリの目的で、スタンバイDBシステムはプライマリDBシステムとは別の可用性ドメイン内に作成できます(これを強くお薦めします)。プライマリDBシステムのクラウド・ネットワーク内にスタンバイDBシステムを作成すると、両方のシステムを単一のルーティング可能なネットワーク内に配置できます。

  2. DBシステムにSSH接続します。
    ssh -i <private_key_path> opc@<db_system_ip_address>
  3. opcとしてログインし、sudorootユーザーに切り替えます。ハイフンを含むsudo su -を使用して、rootユーザーのプロファイルを起動します。これによって、PATHがdbcliディレクトリ(/opt/oracle/dcs/bin)に設定されます。
    sudo su -
  4. DBシステムには初期データベースが含められますが、dbcli create-databaseコマンドを--instanceonlyパラメータとともに使用してスタンバイ・データベースを作成する必要があります。このパラメータではデータベース・ストレージ構造のみが作成され、データベースが非マウント・モードで起動されます(他のデータベース・ファイルは作成されません)。

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

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

    dbcli create-database --dbname <same as primary dbname>;--databaseUniqueName <different from primary uniquename>;--instanceonly --adminpassword

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

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

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

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

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

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

静的リスナーの構成

RMANおよびData Guard Brokerで使用される静的リスナーを作成します。

  1. プライマリDBシステムにSSH接続して、opcまたはrootユーザーとしてログインし、sudoでgrid OSユーザーに切り替えます。
    sudo su - grid
  2. /u01/app/<version>/grid/network/admin/listener.oraを編集し、次の内容をそれに追加します。ここに示された1つ目の静的リスナーは、オプションです。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ユーザーとして、自動スタンバイ・ファイル管理を有効にします。
    alter system set standby_file_management=AUTO;
  2. ブローカ構成ファイルの名前および場所を特定します。これに使用するコマンドは、データベース・ストレージのタイプによって異なります。データベース・ストレージのタイプがわからない場合は、DBシステムでdatabaseコマンドを使用します。

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

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

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

    alter system set dg_broker_config_file1='+DATA/<Primary db_unique_name>/dr1<db_unique_name>.dat';
    alter system set dg_broker_config_file2='+DATA/<Primary db_unique_name>/dr2<db_unique_name>.dat';
  3. データベースのブローカDMONプロセスを有効にします。
    alter system set dg_broker_start=true;
  4. すべてのデータベース・トランザクションに対してデータベース・ロギングを強制的に実行します。
    alter database force logging ;
  5. オンラインREDOログ(ORL)に基づいて、スタンバイREDOログ(SRL)を追加します。新しく起動したDBシステムには、サイズ1073741824のORLが3つあるため、同じサイズの4つのSRLを作成します。

    次の問合せを使用して、ORLの数およびサイズ(バイト)を確認できます。

    select group#, bytes from v$log;
    出力:
        GROUP# BYTES
    ---------- ----------
             1 1073741824
             2 1073741824
             3 1073741824

    すべてのORLは同じサイズである必要があります。

    SRLはORLと同じサイズである必要がありますが、ORLより少なくとも1つ多くSRLが存在する必要があります。前述の例では、ORLが3つあるため、SRLが4つ必要です。そのため、現在のREDOログに1を足した数を指定し、REDOログと同じサイズを使用します。

    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>ではなくディスク・グループが使用されます。

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

    ヒント :

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

  6. 正しい数のSRLを作成したことを確認します。
    select group#, bytes from v$standby_log;
  7. データベースがARCHIVELOGモードになっていることを確認します。
    archive log list
  8. データベースのFLASHBACKを有効にします。db_flashback_retention_targetの最小推奨値は120分です。
    alter database flashback on ;
    alter system set db_flashback_retention_target=120;  
  9. データベースが新しく作成された場合は、単一のスイッチREDOログを実行して、アーカイブをアクティブにします。(RMAN duplicateを実行する前に、少なくとも1つのログをアーカイブする必要があります。)
    alter system switch logfile;

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

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

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

静的リスナーの構成

RMANおよびData Guard Brokerで使用される静的リスナーを作成します。

  1. スタンバイDBシステムにSSH接続して、opcまたはrootユーザーとしてログインし、sudoでgrid OSユーザーに切り替えます。
    sudo su - grid
  2. 次の内容を/u01/app/<db_version>/grid/network/admin/listener.oraに追加します。

    次に示された1つ目の静的リスナーは、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ウォレットのコピー

SCPを使用して、プライマリDBシステムからスタンバイDBシステムにTDEウォレット・ファイルをコピーします。次のサンプル・コマンドでは、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ではオプションです。

mkdir  -pv /u03/app/oracle/redo/<standby db_unique_name uppercase>/controlfile

監査ファイルの保存先の作成

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

mkdir -p /u01/app/oracle/admin/<db_name>/adump

そうしない場合、後で使用するRMAN duplicateコマンドが失敗します。

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

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

orapwd file=$ORACLE_HOME/dbs/orapw<standby oracle_sid>    password=<admin password for primary> entries=5

パスワードは、プライマリ・データベースの管理パスワードと同じにする必要があります。そうしない場合、次のRMAN duplicateステップはRMAN-05614: Passwords for target and auxiliary connections must be the same when using active duplicate.で失敗します

スタンバイ・データベースが使用可能になっていることの確認

  1. oracleユーザーとして、環境変数を設定します。
    . oraenv
  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を指定せずに非マウント・モードで起動する必要がありますが、元のinitファイルにspfileパラメータが含まれているために、RMAN duplicateステップが機能しなくなります。

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

    ノート:

    このステップを実行しない場合、ウォレットは開かれず、後続のステップでRMAN DUPLICATEコマンドを実行すると失敗します。
  5. 先に使用したdbcli create-database --instanceonlyコマンドでは、スタンバイ・データベースがプライマリとして読取り/書込みモードでオープンするため、次の非マウント・ステップに進む前にデータベースを停止する必要があります。
    sqlplus / as sysdba
    
    shutdown immediate
  6. データベースを非マウント・モードで起動します。
    startup nomount

データベース接続の確認

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

  1. プライマリDBシステムおよびスタンバイDBシステムに使用されるセキュリティ・リストで、リスナー・ポート1521がオープンしていることを確認します。詳細は、DB Systemのセキュリティ・リストの更新を参照してください。
  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つのチャネルによってデータベースの複製が数分で実行されます。

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

次の例では、特に指定がないかぎり、<Standby db_unique_name>に小文字を使用します。

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

rman target sys/<password>@<primary alias>  auxiliary sys/<password>@<standby alias> log=rman.out
                  
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
  
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分以上に設定します。
    alter database flashback on;
    alter system set db_flashback_retention_target=120;
  2. スタンバイ・データベースが正しく作成されていることを確認します。
    select FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE,SWITCHOVER_STATUS, DATAGUARD_BROKER, PROTECTION_MODE from v$database ;

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

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

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. 既存のデータベース・サービスを停止して削除します。
    srvctl stop database 
        -d <standby db_unique_name>
    
    srvctl remove database 
        -d <standby db_unique_name>
  3. データベース・サービスを作成します。
    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. spfileファイルの新しい場所を参照するために、$ORACLE_HOME/dbs/init<standby oracle_sid>.oraファイルを作成します。
    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ファイルを生成することを検討してください。
    create pfile='init<standby oracle_sid>.ora' from spfile ;
    create spfile='+DATA' from pfile='init<standby oracle_sid>.ora' ;
  2. 既存のデータベース・サービスを停止して削除します。
    srvctl stop database 
        -d <standby db_unique_name>
    
    srvctl remove database 
        -d <standby db_unique_name>
  3. データベース・サービスを作成します。
    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. spfileファイルの新しい場所を参照するために、$ORACLE_HOME/dbs/init<standby oracle_sid>.oraファイルを作成します。
    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システムまたはスタンバイDBシステムからdgmgrlコマンドライン・ユーティリティを実行し、sys資格証明を使用してプライマリ・データベースに接続します。
    connect sys/<sys password>@<primary tns alias>
  2. dgmgrlコマンドライン・ユーティリティで、Data Guard構成を作成し、プライマリ・データベースとスタンバイ・データベースを識別します。
    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. dgmgrlコマンドライン・ユーティリティで、Data Guard構成を有効にします。
    enable configuration;
  4. Data Guardの設定が正しく行われたことを確認します。SQLプロンプトで、プライマリ・データベースとスタンバイ・データベースの両方で次のSQLを実行します。
    select FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS, DATAGUARD_BROKER, PROTECTION_MODE from v$database;
  5. スタンバイ・データベースでData Guardプロセスが開始されていることを確認します。
    select PROCESS,PID,DELAY_MINS from V$MANAGED_STANDBY;
  6. プライマリおよびスタンバイのパラメータ構成を確認します。
    show parameter log_archive_dest_
    show parameter log_archive_config
    show parameter fal_server
    show parameter log_archive_format
  7. dgmgrlコマンドライン・ユーティリティで、Data Guard構成が機能していることを確認します。具体的には、REDO送信とREDO適用が機能しており、スタンバイがプライマリよりも大きく遅れていないことを確認してください。
    show configuration verbose
    show database verbose <standby db_unique_name>
    show database verbose <primary db_unique_name>

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

  8. スイッチオーバーとフェイルオーバーを両方向で実行して、Data Guard構成が正常に機能していることを確認します。dgmgrlコマンドライン・ユーティリティで、各操作の後にshow configurationを実行し、エラーや警告がないことを確認します。

    注意:

    このステップは、ユーザーの判断で設定できるオプションです。なんらかの理由で構成が有効でない場合は、スイッチオーバーまたはフェイルオーバー(あるいはその両方)が失敗し、プライマリ・データベースの起動が困難または不可能になる可能性があります。プライマリのリカバリが必要になり、可用性に影響を及ぼす場合があります。

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

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

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

  1. 前述のように、プライマリ・データベースとスタンバイ・データベースの両方にTNS別名を構成し、両方のデータベースへの接続を確認します。
  2. 保護モードをmaxavailabilityまたはmaxperformanceに変更します(FSFOではmaxprotectionはサポートされていません)。

    maxavailabilityを有効にするには:

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

    maxperformanceを有効にするには:

    edit configuration set protection mode as maxperformance;
    edit database <standby db_unique_name> set property 'logXptMode'='ASYNC';
    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. ブローカからファスト・スタート・フェイルオーバーを有効にします:
    Enable fast_start failover
  5. ファスト・スタート・フェイルオーバーおよび関連する設定を確認します。
    show fast_start failover
  6. ブローカからオブザーバを起動します(フォアグラウンドで実行されますが、バックグラウンドで実行することもできます)。
    start observer
  7. ファスト・スタート・フェイルオーバーが有効になっていて、エラーや警告がないことを確認します。
    show configuration verbose
  8. すべてが正常に機能していることを確認するために、必ずフェイルオーバーのテストは両方向で行ってください。プライマリ・データベースの強制終了を実行して、FSFOが適切に実行されていることを確認します。

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