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の準備の項を参照してください。
-
管理クライアントからデプロイメントに接続します:
CONNECT https://source:srvmgrport DEPLOYMENT deployment_name AS deployment_user PASSWORD deployment_password
-
DBLOGIN
コマンドを使用してソースPostgreSQLデータベースに接続します。ソース・データベースへのデータベース接続を設定していない場合は、「データベース接続の追加」のステップを使用するか管理クライアントからALTER CREDENTIALSTORE
コマンドを使用して設定できます。
たとえば、別名がggeastの場合、コマンドは次のようになります:DBLOGIN USERIDALIAS alias
DBLOGIN USERIDALIAS ggeast
-
ソース・データベースにチェックポイント表を追加します。
ADD CHECKPOINTTABLE owner.table_name
たとえば:ADD CHECKPOINTTABLE ggs.checkpoint
-
Extractパラメータ・ファイルを作成してレプリケート対象の表を取得し、
REGISTER EXTRACT
コマンドを使用してソースPostgreSQLデータベースに新しいExtractを登録します。ただし、Extractを追加しないでください。REGISTER EXTRACT extract_name
たとえば:
REGISTER EXTRACT extcdc
-
Extractプロセスの開始ポイントを作成するためとPostgreSQLスナップショットの位置指定のために使用される、一時レプリケーション・スロットを作成します。これは、
CREATE_REPLICATION_SLOT
コマンドを使用して実行できます。次に、一時レプリケーション・スロットを構成するステップを示します:-
レプリケーション・ロールがあるユーザーとして
psql
を使用してPostgreSQLデータベースにログインします。 -
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)
-
snapshot_name
およびconsistent_point
を書き留めます。
-
-
次の例で示すように、
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
オプションは、データベース全体をレプリケートすることが前提となっています。しかしながら、データベースの一部をレプリケートする場合は、それらのオブジェクトのみをダンプできます。 -
ADD EXTRACT
コマンドを使用してExtractを追加します。Extractの位置は、ステップ5cで記録したconsistent_point
に設定する必要があります。ADD EXTRACT extract_name, TRANLOG, LSN lsn_value
たとえば:
ExtractをこのLSN値に位置指定し、ダンプに含まれているデータがExtractで取得されないようにします。ADD EXTRACT extecdc, TRANLOG, LSN 1/42332A6B0
-
ADD EXTTRAIL
コマンドを使用してExtract証跡を追加します。ADD EXTTRAIL trail_name, EXTRACT extract_name
たとえば:ADD EXTTRAIL east/ea, EXTRACT extecdc
-
Extractを起動します。
START EXTRACT extract_name
-
(オプション)証跡ファイルを別のサーバーに送信するために分散パスを構成する必要がある場合は、
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
-
pg_restore
コマンドを使用して、ターゲット・サーバーにデータベースをリストアします。pg_dump
の場合と同様に、セッションが失われるとリストアに失敗するためnohup
オプションを使用することをお薦めします。この例では、次のオプションを使用しています:$ nohup /u01/pgsql-16/bin/pg_restore -h pgtarget -p 6432 -U ggadmin -d pgtarget -v latestdump.db &
-
(オプション)別のデプロイメントでレシーバ・サービスへの分散パスを作成した場合は、管理クライアントの
CONNECT
コマンドを使用してターゲット・デプロイメントに接続する必要があることがあります。CONNECT https://target:srvmgrport DEPLOYMENT deployment_name AS deployment_user PASSWORD deployment_password
-
DBLOGIN USERIDALIAS
コマンドを使用してターゲットPostgreSQLデータベースに接続します。ソース・データベースへのデータベース接続を設定していない場合は、「データベース接続の追加」のステップを使用するか管理クライアントからALTER CREDENTIALSTORE
コマンドを使用して設定できます。 -
ターゲット・データベースにチェックポイント表を追加します。
ADD CHECKPOINTTABLE ggs.chkpoint
-
Replicatを追加します。これにより、データベースのリストアが完了した後にターゲット・データベースに変更が適用されます。
ADD REPLICAT replicat_name
たとえば:
ADD REPLICAT repecdc
-
リストアが完了したら、次の例で示すようにReplicatを起動します:
START REPLICAT repecdc