使用 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*