pg_dumpユーティリティを使用したPostgreSQL環境間の正確なインスタンス化

Oracle GoldenGateを使用して2つ以上の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の準備が完了していることを確認してください。詳細は、Prepare 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コマンドを使用して新しいExtractをソースPostgreSQLデータベースに登録しますが、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. (オプション)別のデプロイメントでReceiverサービスへの分散パスを作成した場合は、Admin Clientの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*