pg_dumpの使用によるPostgreSQL環境間での正確なインスタンス化

Oracle GoldenGateを使用して複数のPostgreSQL互換データベース間でレプリケートするときは、PostgreSQLに含まれているpg_dump (pg_dumpall)/pg_restoreバックアップ・ユーティリティを使用できます。これにより、ソース・データベースのバックアップまたはスナップショットが作成されます。これが、ターゲット・システムにリストアされます。

PostgreSQLドキュメントでpg_dump (pg_dumpall)とpg_restoreを参照してください。

次のステップでは、このバックアップをOracle GoldenGateとともに使用して正確な初期インスタンス化(これは、ソースをオフラインにする必要やHANDLECOLLISIONSを使用する必要がない)を実行する方法について説明します。これらのステップでは管理クライアントを使用しますが、同じステップをOracle GoldenGate Microservices WebインタフェースおよびRest APIサービス・エンドポイントから実行できます。

これらのステップを開始する前に、Oracle GoldenGate用のPostgreSQLの準備が完了していることを確認してください。詳細は、PostgreSQLの準備の項を参照してください。

  1. 管理クライアントからデプロイメントに接続します:

    CONNECT https://source:srvmgrport DEPLOYMENT deployment_name AS deployment_user PASSWORD deployment_password
  2. DBLOGINコマンドを使用してソースPostgreSQLデータベースに接続します。ソース・データベースへのデータベース接続を設定していない場合は、「データベース接続の追加」のステップを使用するか管理クライアントからALTER CREDENTIALSTOREコマンドを使用して設定できます。
    DBLOGIN USERIDALIAS alias
    たとえば、別名がggeastの場合、コマンドは次のようになります:
    DBLOGIN USERIDALIAS ggeast
  3. ソース・データベースにチェックポイント表を追加します。
    ADD CHECKPOINTTABLE owner.table_name
    たとえば:
    ADD CHECKPOINTTABLE ggs.checkpoint
  4. Extractパラメータ・ファイルを作成してレプリケート対象の表を取得し、REGISTER EXTRACTコマンドを使用してソースPostgreSQLデータベースに新しいExtractを登録します。ただし、Extractを追加しないでください。
    REGISTER EXTRACT extract_name

    たとえば:

    REGISTER EXTRACT extcdc
  5. Extractプロセスの開始ポイントを作成するためとPostgreSQLスナップショットの位置指定のために使用される、一時レプリケーション・スロットを作成します。これは、CREATE_REPLICATION_SLOTコマンドを使用して実行できます。次に、一時レプリケーション・スロットを構成するステップを示します:

    1. レプリケーション・ロールがあるユーザーとしてpsqlを使用してPostgreSQLデータベースにログインします。

    2. replication=databaseオプションを使用します。これは、ステップ2で作成したのと同じユーザーです。

      たとえば:

      $ psql "dbname=pgsource replication=database user=ggeast" 
      Password for user ggadmin: psql (16.3) 
      
      Type "help" for help.  
      pgsource=# CREATE_REPLICATION_SLOT tslot TEMPORARY LOGICAL test_decoding EXPORT_SNAPSHOT;
      
      slot_name | consistent_point | snapshot_name | output_plugin
      ----------+------------------+---------------------+--------------- 
      tslot | 1/4232A6B0 | 00000007-00001142-1 | test_decoding 
      (1 row)
    3. snapshot_nameおよびconsistent_pointを書き留めます。

  6. 次の例で示すように、pg_dump (または、クラスタ・データベースの場合はpg_dumpall)を使用してスナップショットを作成します:

    ノート:

    このコマンドの実行には時間がかかる場合があります。nohupオプションを使用してこのコマンドを発行し、セッションがクローズしてもコマンドが停止されないようにすることをお薦めします。

    $ nohup /u01/pgsql-16/bin/pg_dump -h pgsource -p 5432 -U ggeast –snapshot=00000007-00001142-1 -F c -b -v -f latestdump.db pgsource &

    pg_dump / pg_dumpallでは、ステップ5cの出力から受信したsnapshot_nameが使用されています。この例では、pg_dumpオプションは、データベース全体をレプリケートすることが前提となっています。しかしながら、データベースの一部をレプリケートする場合は、それらのオブジェクトのみをダンプできます。

  7. ADD EXTRACTコマンドを使用してExtractを追加します。Extractの位置は、ステップ5cで記録したconsistent_pointに設定する必要があります。

    ADD EXTRACT extract_name, TRANLOG, LSN lsn_value
    たとえば:
    ADD EXTRACT extecdc, TRANLOG, LSN 1/42332A6B0
    ExtractをこのLSN値に位置指定し、ダンプに含まれているデータがExtractで取得されないようにします。
  8. ADD EXTTRAILコマンドを使用してExtract証跡を追加します。
    ADD EXTTRAIL trail_name, EXTRACT extract_name
    たとえば:
    ADD EXTTRAIL east/ea, EXTRACT extecdc
  9. Extractを起動します。
    START EXTRACT extract_name
  10. (オプション)証跡ファイルを別のサーバーに送信するために分散パスを構成する必要がある場合は、ADD DISTPATHコマンドを使用します。
    ADD DISTPATH name SOURCE source_uri TARGET target_uri 
    たとえば:
    ADD DISTPATH dpecdc SOURCE trail://localhost:9002/services/v2/sources?trail=ea TARGET wss://localhost:9003/services/v2/targets?trail=ea 
  11. pg_restoreコマンドを使用して、ターゲット・サーバーにデータベースをリストアします。pg_dumpの場合と同様に、セッションが失われるとリストアに失敗するためnohupオプションを使用することをお薦めします。この例では、次のオプションを使用しています:
    $ nohup /u01/pgsql-16/bin/pg_restore -h pgtarget -p 6432 -U ggadmin -d pgtarget -v
    latestdump.db &
  12. (オプション)別のデプロイメントでレシーバ・サービスへの分散パスを作成した場合は、管理クライアントのCONNECTコマンドを使用してターゲット・デプロイメントに接続する必要があることがあります。
    CONNECT https://target:srvmgrport DEPLOYMENT deployment_name AS deployment_user PASSWORD deployment_password
  13. DBLOGIN USERIDALIASコマンドを使用してターゲットPostgreSQLデータベースに接続します。ソース・データベースへのデータベース接続を設定していない場合は、「データベース接続の追加」のステップを使用するか管理クライアントからALTER CREDENTIALSTOREコマンドを使用して設定できます。

  14. ターゲット・データベースにチェックポイント表を追加します。
    ADD CHECKPOINTTABLE ggs.chkpoint
  15. Replicatを追加します。これにより、データベースのリストアが完了した後にターゲット・データベースに変更が適用されます。
    ADD REPLICAT replicat_name

    たとえば:

    ADD REPLICAT repecdc
  16. リストアが完了したら、次の例で示すようにReplicatを起動します:
    START REPLICAT repecdc