使用 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命令进行设置。DBLOGIN USERIDALIAS *alias*例如,如果别名是 ggeast,则命令将为:
DBLOGIN USERIDALIAS ggeast -
向源数据库添加一个 checkepoint 表。
ADD CHECKPOINTTABLE *owner.table_name*例如:
ADD CHECKPOINTTABLE ggs.checkpoint -
创建提取参数文件以捕获要复制的表,并使用
REGISTER EXTRACT命令向源 PostgreSQL 数据库注册新提取,但不添加提取。REGISTER EXTRACT *extract_name*例如:
REGISTER EXTRACT extcdc -
创建一个临时复制插槽,该插槽将用于为提取进程和定位 PostgreSQL 快照创建起点。这可以使用
CREATE_REPLICATION_SLOT命令完成。下面是配置临时复制插槽的步骤:-
以具有 replication 角色的用户身份使用
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命令添加提取。提取应位于步骤 5c 中跟踪的consistent_point:ADD EXTRACT *extract_name*, TRANLOG, LSN *lsn_value*例如:
ADD EXTRACT *extecdc*, TRANLOG, LSN 1/42332A6B0将提取定位到此 LSN 值,确保提取不会捕获转储中包含的任何数据。
-
使用
ADD EXTTRAIL命令添加提取线索。ADD EXTTRAIL *trail_name*, EXTRACT *extract_name*例如:
ADD EXTTRAIL *east/ea*, EXTRACT *extecdc* -
启动提取。
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 -
添加将在数据库恢复完成后将更改应用于目标数据库的复制。
ADD REPLICAT *replicat_name*例如:
ADD REPLICAT repecdc -
在恢复完成后启动复制,如以下示例中所示:
START REPLICAT *repecdc*