タスク10: Oracle GoldenGateプロセスの構成

タスク10: Oracle GoldenGateプロセスの構成」で示されているガイダンスに加え、Extract、分散パスおよびReplicatに関する次の推奨事項に従います。

プライマリ・クラスタでのExtract構成

REDO転送の最大パフォーマンス・モードまたは最大可用性モードを使用しているData Guard構成を使用するGoldenGate Extractプロセスでは、トランザクションが失われて論理データの不整合が発生しないように、プライマリ・クラスタ上のExtractプロセス・パラメータ・ファイルに次のパラメータを追加する必要があります。

TRANLOGOPTIONS HANDLEDLFAILOVER

このパラメータにより、まだData Guardスタンバイ・データベースに適用されていないREDOからExtractがトランザクション・データを抽出しないようにします。これは、Oracle GoldenGateがソース・スタンバイ・データベースに存在しないデータをターゲット・データベースにレプリケートしないようにするために重要です。

このパラメータが指定されていないと、ソース・データベースのデータ損失フェイルオーバー後に、ソース・データベースに存在していないデータがターゲット・データベースに保持される可能性があります。それにより、論理データの不整合が発生します。

デフォルトでは、スタンバイ・データベースで適用されたSCN情報を問い合せることができないためにExtractが停止すると、その60秒後に、警告メッセージがExtractレポート・ファイルに書き込まれます。たとえば:

WARNING OGG-02721 Extract has been waiting for the standby database for 60 seconds.

Extractレポート・ファイルに警告メッセージが書き込まれるまでの時間は、ExtractパラメータのTRANLOGOPTIONS HANDLEDLFAILOVER STANDBY_WARNINGを使用すると調整できます。

Extractが30分(デフォルト)後にスタンバイ・データベースによって適用されたSCN情報を問い合せることができない場合、Extractプロセスは異常終了して、次のメッセージがExtractレポート・ファイルに記録されます。

ERROR OGG-02722 Extract abended waiting for 1,800 seconds for the standby database to be accessible or caught up with the primary database.

デフォルトのタイムアウトである30分が経過するまでにスタンバイ・データベースが使用可能になると、Extractでソース・データベースからのデータのマイニングが続行され、次のメッセージがレポート・ファイルに報告されます。

INFO OGG-02723 Extract resumed from stalled state and started processing LCRs.

タイムアウト値の30分は、ExtractパラメータTRANLOGOPTIONS HANDLEDLFAILOVER STANDBY_ABEND valueを使用して調整できます。ここでのvalueは、スタンバイが使用不可になってから異常終了するまでの秒数です。

計画メンテナンスの停止時など、スタンバイ・データベースが長時間使用できなくなるときに、Extractでプライマリ・データベースからのデータ抽出を続行する場合は、Extractパラメータ・ファイルからTRANLOGOPTIONS HANDLEDLFAILOVERパラメータを削除して、Extractを再起動してください。このパラメータは、スタンバイが使用可能になったら必ず設定してください。

ノート:

スタンバイが使用できない間にプライマリ・データベースからの抽出が続行されていると、スタンバイが使用可能になったときにデータ損失フェイルオーバーが発生し、フェイルオーバーの前にすべてのプライマリREDOが適用されていない可能性もあります。GoldenGateターゲット・データベースには、ソース・データベースに存在しないデータが含まれるようになります。

TRANLOGOPTIONS HANDLEDLFAILOVERパラメータの詳細は、Oracle GoldenGateリファレンス・ガイド(https://docs.oracle.com/en/middleware/goldengate/core/21.3/reference/reference-oracle-goldengate.pdf)を参照してください。

タスク11: ExtractプロセスとReplicatプロセスの自動起動の構成」の説明に従ってExtractプロセスに自動再起動プロファイルが割り当てられている場合は、Data Guardロール・トランジションの後に、Extractプロセスが自動的に再起動されます。Extractでは、デフォルトのタイムアウト期間である5分が経過するまで、新しいスタンバイ・データベースの現在の状態が無視されて、新しいプライマリ・データベースからのREDOデータのマイニングが続行されます。この期間の経過後にスタンバイが使用できない場合、Extractは次のエラーで異常終了します。

INFO OGG-25053 Timeout waiting for 300 seconds for standby database reinstatement. Now enforcing HANDLEDLFAILOVER.

ERROR OGG-06219 Unable to extract data from the Logmining server OGG$CAP_EXT1.

ERROR OGG-02078 Extract encountered a fatal error in a processing thread and is abending.

Extractは、Oracle GoldenGate Microservicesの自動再起動プロファイルに基づいて、再試行回数に達するか新しいスタンバイ・データベースが使用可能になるまで自動的に再起動し、HANDLEDLFAILOVERタイムアウトに達すると失敗します。

データベース・ロール・トランジション後のタイムアウト期間中、HANDLEDLFAILOVERパラメータは自動的に一時停止されるため、ソース・スタンバイ・データベースが最新の状態に維持されていないことの考慮なしに、データがOracle GoldenGateレプリカ・データベースにレプリケートされます。Extractの異常終了前に起動するスタンバイ・データベースのタイムアウト期間は、ExtractパラメータのTRANLOGOPTIONS DLFAILOVER_TIMEOUTを使用すると調整できます。

DLFAILOVER_TIMEOUTをデフォルトの5分のままにして、古いプライマリがスタンバイに変換できるようにすることをお薦めします。新しいスタンバイ・データベースが長期間使用できなくなるか完全に消失した場合に、Extractを起動して実行状態を維持するには、Extractパラメータ・ファイルからHANDLEDLFAILOVERパラメータを削除する必要があります。このパラメータを削除すると、ExtractはREDOがスタンバイ・データベースに適用されるまで待機することなくデータを抽出します。

スタンバイ・データベースがオンラインに戻りプライマリ・データベースからのすべてのREDOが適用されるまでの期間は、

それとOracle GoldenGateレプリカ・データベースとでデータの相違があります。これは、スタンバイ・データベースが最新状態になると解決されます。その時点で、統合Extractプロセス・パラメータ・ファイルにHANDLEDLFAILOVERパラメータを再追加し、Extractを停止してから再起動します。

プライマリ・データベースが失われた場合にブローカでスタンバイ・データベースに自動的にフェイルオーバーできるなど、ファスト・スタート・フェイルオーバーを有効にしてOracle Data Guardが構成されている場合は、次に示す統合Extractパラメータをさらに指定する必要があります。

TRANLOGOPTIONS FAILOVERTARGETDESTID n

このパラメータでは、スタンバイ・データベースにまだ適用されていないREDOデータを抽出しないことに関して、Oracle GoldenGate Extractプロセスを遅らせたままにしておく必要があるスタンバイ・データベースを指定します。

FAILOVERTARGETDESTIDの正しい値を判断するには、ソース・スタンバイ・データベースへのREDOの送信に使用されるGoldenGateソース・データベースのLOG_ARCHIVE_DEST_Nパラメータを使用します。たとえば、LOG_ARCHIVE_DEST_2がスタンバイ・データベースを指している場合は2の値を使用します。

たとえば:

SQL> show parameters log_archive_dest

NAME                  TYPE     VALUE
--------------------- -------- ---------------------------------------------------
log_archive_dest_1    string   location=USE_DB_RECOVERY_FILE_DEST,
                               valid_for=(ALL_LOGFILES, ALL_ROLES)

log_archive_dest_2    string   service="ggnorths", SYNC AFFIRM delay=0
                               optional compression=disable max_failure=0 reopen=300
                               db_unique_name="GGNORTHS" net_timeout=30,
                               valid_for=(online_logfile,all_roles)

この例では、次のようにExtractパラメータを設定します。

TRANLOGOPTIONS FAILOVERTARGETDESTID 2

Extractパラメータ・ファイルにこのパラメータを追加するには、Oracle GoldenGate Administration Serverを使用してExtract詳細の表示を選択します

  1. 「管理サービス」タブで、Extractの「アクション」メニューを選択し、「詳細」を選択します。

  2. Extract詳細のビューで、「パラメータ」タブを選択してから、鉛筆アイコンを選択して、現在のパラメータ・ファイルを編集します。

  3. TRANLOGOPTIONSパラメータを追加し、変更を保存するために「適用」を選択します。

新しいパラメータを有効にするために、Extractプロセスを停止してから再起動する必要があります。これは管理サーバーを使用して実行できます。

前述のExtract TRANLOGOPTIONSパラメータの詳細は、Oracle GoldenGateのリファレンス(https://docs.oracle.com/en/middleware/goldengate/core/21.3/reference/tranlogoptions.html#GUID-B6ADFEC9-10E6-456D-9477-088513E113AF)を参照してください。

プライマリおよびスタンバイ・クラスタでの分散パス構成

受信サーバーを実行しているOracle GoldenGate環境のターゲット・データベースがOracle Data Guardで保護されている場合、受信サーバーに証跡ファイルを送信する分散パスには重要な考慮事項があります。Oracle Data Guardロール・トランジションの後に受信サーバーを別のクラスタに移動する場合は、新しいターゲット・クラスタ・アドレスを反映するように分散パスを変更する必要があります。

分散パスは、受信サーバー・クラスタにあるターゲット・データベースでデータベース・ロール・トランジション・トリガーを使用して自動的に変更できます。

プライマリ・クラスタとスタンバイ・クラスタのVIPで別々のルートCA証明書が使用されている場合は、「オンプレミス: Oracle Real Application Clustersを使用したOracle GoldenGate Microservices Architectureの構成のベスト・プラクティス」の説明に従って、スタンバイ証明書をソース・デプロイメントのサービス・マネージャに追加する必要があります。

次の手順に従って、データベース・ロール・トランジション・トリガーを作成します。このトリガーでは、ターゲット・データベースのData Guardロール・トランジションの間の、受信サーバーがプライマリ・システムとスタンバイ・システムの間で移動されるときに、分散パスのターゲット・アドレスが変更されます。

  1. 分散パスを変更するシェル・スクリプトを作成します。

    分散パス・ターゲット変更スクリプトの例」には、分散パス・ターゲット・アドレスの変更に使用できるシェル・スクリプトの例が記載されています。適切な変数値の設定については、スクリプト例のコメントを参照してください。

    このスクリプトは、プライマリ・データベース・クラスタおよびスタンバイ・データベース・クラスタのすべてのOracle RACノードで同じローカル・ディレクトリに配置する必要があります。スクリプト・ファイルの権限は6751に設定します。

    たとえば:

    $ chmod 6751 /u01/oracle/goldengate/scripts/change_path_target.sh

    このシェル・スクリプト例では、REST APIコールを使用してOracle GoldenGate分散パスにアクセスします。このREST APIコールをセキュアにするために、次に示すように、GoldenGateデプロイメント管理者のユーザー名とパスワードを構成ファイル(access.cfg)に含めることをお薦めします。

    $ cat /u01/oracle/goldengate/scripts/access.cfg
    
    user = "oggadmin:<password>"

    access.cfgファイルは、次のデータベース・ロール・トランジション・トリガーでも参照されます。

  2. DBMS_SCHEDULERジョブを作成します。

    PL/SQL内からオペレーティング・システム・シェル・スクリプトを実行するために、DBMS_SCHEDULERジョブを作成する必要があります。ルート・コンテナ・データベース(CDB)内にSYSDBAユーザーとしてスケジューラ・ジョブを作成します。

    たとえば:

    SQL> exec dbms_scheduler.drop_job('gg_change_path_target');
    SQL> exec dbms_scheduler.create_job(job_name=>'gg_change_path_target',
     job_type=>'EXECUTABLE', number_of_arguments => 6,
     job_action=>'/u01/oracle/goldengate/scripts/change_path_target.sh',
     enabled=>FALSE);

    外部ジョブを実行するには、$ORACLE_HOME/rdbms/admin/externaljob.oraファイルのパラメータrun_userrun_groupをOracleデータベースのオペレーティング・システムのユーザーとグループに設定する必要があります。

    たとえば:

    run_user = oracle
    run_group = oinstall
    extrernaljob.oraは、プライマリ・データベース・クラスタおよびスタンバイ・データベース・クラスタのすべてのOracle RACノードで構成する必要があります。
  3. データベース・ロール・トランジション・トリガーを作成します。

    次の例を使用して、GoldenGateターゲット・データベースに、スタンバイ・データベースがプライマリ・データベースになったときに起動され分散パスのターゲット・アドレスを変更するロール・トランジション・トリガーを作成します。

    CREATE OR REPLACE TRIGGER gg_change_path
    AFTER db_role_change ON DATABASE
    declare
      role varchar2(30);
      hostname varchar2(64);
    begin
      select database_role into role from v$database;
      select host_name into hostname from v$instance;
    
      DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('gg_change_path_target',1,'source_primary_cluster_VIP');
    
    DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('gg_change_path_target',2,'source_standby_cluster_VIP');
      DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('gg_change_path_target',4,'dist_path_name');
      DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('gg_change_path_target',5,'deployment_name');
      DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('gg_change_path_target',6, '<dir/access.cfg>');
    
      if role = 'PRIMARY' and hostname like 'primary_target_cluster_name%'
      then
    
        DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('gg_change_path_target',3,'primary_target_cluster_VIP:443');
      elsif role = 'PRIMARY'
      then
        DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('gg_change_path_target',3,'standby_target_cluster_VIP:443');
      end if;
      DBMS_SCHEDULER.RUN_JOB(job_name=>'gg_change_path_target');
    end;
    /

    データベース・トリガーを作成した後、次のコマンドを使用して、プライマリ・データベースにあるログ・ファイルを切り替えてコードがスタンバイ・データベースに伝播されるようにします。

    SQL> alter system switch all logfile;

プライマリ・クラスタでのReplicat構成

オンプレミス: Oracle Real Application Clustersを使用したOracle GoldenGate Microservices Architectureの構成のベスト・プラクティス」で説明されているように、ターゲット・データベース内のチェックポイント表は、すべてのOracle GoldenGate Replicatプロセスに必要です。Oracle Data Guardで構成したReplicatには、その他の構成要件はありません。