使用 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. 向源数据库添加一个 checkepoint 表。

    ADD CHECKPOINTTABLE *owner.table_name*

    例如:

    ADD CHECKPOINTTABLE ggs.checkpoint
  4. 创建提取参数文件以捕获要复制的表,并使用 REGISTER EXTRACT 命令向源 PostgreSQL 数据库注册新提取,但不添加提取。

    REGISTER EXTRACT *extract_name*

    例如:

    REGISTER EXTRACT extcdc
  5. 创建一个临时复制插槽,该插槽将用于为提取进程和定位 PostgreSQL 快照创建起点。这可以使用 CREATE_REPLICATION_SLOT 命令完成。下面是配置临时复制插槽的步骤:

    1. 以具有 replication 角色的用户身份使用 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 命令添加提取。提取应位于步骤 5c 中跟踪的 consistent_point:

    ADD EXTRACT *extract_name*, TRANLOG, LSN *lsn_value*

    例如:

    ADD EXTRACT *extecdc*, TRANLOG, LSN 1/42332A6B0

    将提取定位到此 LSN 值,确保提取不会捕获转储中包含的任何数据。

  8. 使用 ADD EXTTRAIL 命令添加提取线索。

    ADD EXTTRAIL *trail_name*, EXTRACT *extract_name*

    例如:

    ADD EXTTRAIL *east/ea*, EXTRACT *extecdc*
  9. 启动提取。

    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. 添加将在数据库恢复完成后将更改应用于目标数据库的复制。

    ADD REPLICAT *replicat_name*

    例如:

    ADD REPLICAT repecdc
  16. 在恢复完成后启动复制,如以下示例中所示:

    START REPLICAT *repecdc*