使用初始加载提取的 Oracle 精确实例化

了解如何使用管理客户端添加初始加载提取。

初始加载方法非常适合在以下情况下进行实例化:

初始加载提取通过直接从源表读取数据并将其写入 EXTFILE 来工作。它直接连接到数据库并获取更改。如下图中所示,执行初始加载实例化时有两个阶段。EXTINIT 提取是初始加载提取,EXTPRM 是主要提取。EXTPRM 进程已设置,但未针对连续复制启动。初始加载提取完成实例化后,将从初始加载启动的点开始连续复制过程。

gwuad_dt_026_file-replicat.png 的说明如下:

要配置此提取,您需要结合使用基于文件的初始加载和更改数据捕获 (CDC) 进程。使用初始加载提取的实例化流程包括以下任务:

基于文件的初始加载过程是在 MA 中执行数据复制的首选方法。其主要组件包括:

开始之前,请确保已创建数据库身份证明别名 (USERIDALIAS)。

可以使用 Oracle GoldenGate Web 界面、管理客户端或 cURL 命令设置此配置。

步骤 1:创建主要提取

精准实例化用于将数据库资源正确地从源数据库复制到目标数据库。首先启动主要提取以提前启动更改数据捕获。精确实例化基于以下假设:

注:要使精确的实例化工作,实例化 SCN 必须在注册 SCN 之后。

要开始,请从 AdminClient 创建并启动主提取 EXTPRIM,如以下示例中所示:

命令:

OGG (not connected) 1> CONNECT https://oggdep.example.com:9100 as oggadmin password oggadmin !

输出:

Using default deployment 'OGGDEP'

命令:

OGG (https://oggdep.example.com:9100 OGGDEP) 2> DBLOGIN USERIDALIAS oggadmin

输出:

Successfully logged into database.

命令:

OGG (https://oggdep.example.com:9100 OGGDEP) 3> ADD EXTRACT extprim INTEGRATED TRANLOG BEGIN NOW

输出:

2018-03-16T13:37:07Z INFO OGG-08100 EXTRACT (Integrated) added.

命令:

OGG (https://oggdep.example.com:9100 OGGDEP as oggadmin) 4> REGISTER EXTRACT extprim DATABASE

输出:

2018-03-16T13:37:30Z INFO OGG-02003 Extract EXTPRIM successfully registered with database at SCN 1608891.

命令:

OGG (https://oggdep.example.com:9100 OGGDEP as oggadmin) 5> EDIT PARAMS extprim

命令:

OGG (https://oggdep.example.com:9100 OGGDEP as oggadmin) 6> VIEW PARAMS extprim

输出:

--
-- E X T P R I M . p r m
-- Primary Extract Parameter File
--
Extract EXTPRIM
UseridAlias oggadmin
ExtTrail AA
Table user01.*;

命令:

OGG (https://oggdep.example.com:9100 OGGDEP as oggadmin) 7> ADD EXTTRAIL aa EXTRACT extprim

输出:

2018-03-16T13:37:55Z INFO OGG-08100 EXTTRAIL added.

命令:

OGG (https://oggdep.example.com:9100 OGGDEP as oggadmin) 8> START EXTRACT extprim

输出:

2018-03-16T13:38:02Z INFO OGG-00975 EXTRACT EXTPRIM starting
2018-03-16T13:38:02Z INFO OGG-15426 EXTRACT EXTPRIM started

在此示例中,oggadmin 是数据库身份证明别名。

创建主要提取后,检索 SCN 注册编号。在 AdminClient 中运行 REGISTER EXTRACT 命令。以下示例检索 SCN 值 1608891。

OGG (https://oggdep.example.com:9100 OGGDEP as oggadmin) 4> REGISTER EXTRACT extprim DATABASE

输出:

2018-03-16T13:37:30Z INFO OGG-02003 Extract EXTPRIM successfully registered with database at SCN 1608891.

步骤 2:确定实例化 SCN

Oracle GoldenGate 微服务体系结构中的管理服务提供了用于检索有关开放数据库事务处理信息的端点。此信息可用于标识实例化初始加载提取时要使用的 SCN。

在以下示例中,实例化 SCN 是 1609723,它是所有未结事务处理中最早的 SCN,该 SCN 也超过了上一步中标识的注册 SCN 1608891。

-- Query for active transactions
--
SELECT T.START_SCN, T.STATUS TSTATUS, T.START_DATE,
       S.SID, S.SERIAL#, S.INST_ID, S.USERNAME, S.OSUSER, S.STATUS SSTATUS, S.LOGON_TIME
  FROM gv$transaction T
 INNER JOIN gv$session S
 ON s.saddr = t.ses_addr

UNION ALL

--
-- Query for current status
--
SELECT CURRENT_SCN, 'CURRENT', CURRENT_DATE,
       NULL, NULL, NULL, 'SYS', NULL, NULL, NULL
 from v$database

ORDER BY 1;

此查询的结果可用于确定实例化 SCN。此特定查询的结果为:

1538916 ACTIVE 2018-03-16 18:10:31.0 3865 9176 1 OGGADMIN oracle INACTIVE 2018-03-16 18:10:26.0 1540555 CURRENT 2018-03-16 18:21:50.0 SYS

用于实例化初始加载提取的 SCN 是使用 SQL*Plus 获取的。在以下示例中,SQL 查询使用实例化 SCN 值 1624963,这是所有已打开事务处理中超过 1608891 注册 SCN 的最早 SCN。

OGG (https://oggdep.example.com:9100 OGGDEP as oggadmin) 14> SHELL ECHO 'SELECT MIN(START_SCN) FROM gv$transaction;' | ${ORACLE_HOME}/bin/sqlplus -S / as sysdba

MIN(START_SCN)
--------------
       1624963

如果没有打开的事务处理,则此 SQL 查询将返回一个空结果。考虑到没有未结事务处理的情况的详细查询是:

SELECT MIN(SCN) as INSTANTIATION_SCN
  FROM (SELECT MIN(START_SCN) as SCN
          FROM gv$transaction
         UNION ALL
        SELECT CURRENT_SCN
          FROM gv$database);

步骤 3:创建和启动初始装入复制

开始此步骤之前,请确保目标系统上已存在检查点表 oggadmin.checkpoints。初始装入复制负责填充目标数据库。对 AdminClient 运行以下命令以创建并启动初始装入复制 (REPINIT):

命令:

OGG (not connected) 1> CONNECT https://oggdep.example.com:9100 as oggadmin password oggadmin !

输出:

Using default deployment 'OGGDEP'

命令:

OGG (https://oggdep.example.com:9100 OGGDEP) 2> DBLOGIN USERIDALIAS oggadmin

输出:

Successfully logged into database.

命令:

OGG (https://oggdep.example.com:9100 OGGDEP as oggadmin) 3> ADD CHECKPOINTTABLE oggadmin.checkpoints

输出:

ADD "oggadmin.checkpoints" succeeded.

命令:

OGG (https://oggdep.example.com:9100 OGGDEP as oggadmin) 4> ADD REPLICAT repinit EXTTRAIL dd CHECKPOINTTABLE oggadmin.checkpoints

输出:

2018-03-16T13:56:41Z INFO OGG-08100 REPLICAT added.

命令:

OGG (https://oggdep.example.com:9100 OGGDEP as oggadmin) 5> EDIT PARAMS repinit

命令:

OGG (https://oggdep.example.com:9100 OGGDEP as oggadmin) 6> VIEW PARAMS repinit

输出:

--
--  R E P I N I T . p r m
--  File-Based Initial Load Replicat Parameter File
--
Replicat    REPINIT
UseridAlias oggadmin
Map         user01.*
  Target    user01.*;

命令:

OGG (https://oggdep.example.com:9100 OGGDEP as oggadmin) 7> START REPLICAT repinit

输出:

2018-03-16T13:58:21Z  INFO    OGG-00975  REPLICAT REPINIT starting
2018-03-16T13:58:21Z  INFO    OGG-15426  REPLICAT REPINIT started

步骤 4:创建并启动初始加载提取

使用您检索的实例化 SCN (1624963),将创建初始加载提取,以将数据库表的内容写入线索。创建并启动初始加载提取 EXTINIT。

从 Oracle GoldenGate 26ai 开始,当使用包含通配符的 TABLE 参数解析表时,将不解析初始加载提取表视图。如果视图需要包含在初始加载提取中,则需要在不带通配符的单独 TABLE 参数中指定它们。

例如,如果存在表 hr.employees 和视图 hr.employees_view。对于初始加载提取,如果在初始加载提取的参数文件中指定以下内容:

TABLE hr.*;

初始加载提取中将仅包括表 hr.employees 中的数据。

如果需要在初始加载中包括 hr.employees_view,请将以下参数添加到初始加载提取参数文件:

TABLE SCOTT.TAB1_VIEW;

命令:

OGG (https://oggdep.example.com:9100 OGGDEP as oggadmin) 15> ADD EXTRACT extinit SOURCEISTABLE

输出:

2018-03-16T14:08:38Z INFO OGG-08100 EXTRACT added.

命令:

OGG (https://oggdep.example.com:9100 OGGDEP as oggadmin) 16> EDIT PARAMS extinit

命令:

OGG (https://oggdep.example.com:9100 OGGDEP as oggadmin) 17> VIEW PARAMS extinit

输出:

--
--  E X T I N I T . p r m
--  File-Based Initial Load Extract Parameter File
--
Extract     EXTINIT
UseridAlias oggadmin
ExtFile     CC Megabytes 2000 Purge
Table       user01.*, SQLPredicate "As Of SCN 1624963";

命令:

OGG (https://oggdep.example.com:9100 OGGDEP as oggadmin) 18> START EXTRACT extinit

输出:

2018-03-16T14:13:42Z  INFO    OGG-00975  EXTRACT EXTINIT starting
2018-03-16T14:13:42Z  INFO    OGG-15426  EXTRACT EXTINIT started

步骤 5:创建分发路径

创建两个分发路径(AABB 和 CCDD)以将本地路径从管理客户机复制到远程主机:

命令:

OGG (https://oggdep.example.com:9100 oggdep) 15> ADD DISTPATH aabb SOURCE TRAIL://oggdep.example.com:9102/services/v2/sources?trail=AA target wss://dallas.oggdevops.us:9103/services/v2/targets?trail=BB

输出:

2018-03-16T17:28:27Z INFO OGG-08511 The path 'AABB' has been added.

命令:

OGG (https://oggdep.oggdevops.us:9100 oggdep) 16> ADD DISTPATH ccdd SOURCE TRAIL://oggdep.example.com:9102/services/v2/sources?trail=CC target wss://dallas.oggdevops.us:9103/services/v2/targets?trail=DD

输出:

2018-03-16T17:28:35Z INFO OGG-08511 The path 'CCDD' has been added.

命令:

OGG (https://oggdep.example:9100 oggdep) 17> START DISTPATH aabb

输出:

2018-03-16T17:28:42Z INFO OGG-08513 The path 'AABB' has been started.

命令:

OGG (https://oggdep.example.com:9100 oggdep) 18> START DISTPATH ccdd

输出:

2018-03-16T17:28:47Z INFO OGG-08513 The path 'CCDD' has been started.

如果使用 ogg 协议而不是 wss,则必须使用 TARGETTYPE 选项。这种情况下的语法为:

ADD DISTPATH path-name SOURCE source-uri TARGET target-uri [ TARGETTYPE ( MANAGER | COLLECTOR | RECVSRVR ) ]

TARGETTYPE 指定在分发路径使用旧协议时的目标类型。只有当目标 URI 方案为 ogg 时,此参数才有效。

步骤 6:创建主复制

初始加载提取和复制完成后,可以将其删除。然后,在远程主机上创建主复制进程,以将更改数据应用于目标数据库。

使用 AdminClient 创建主复制进程。注:主复制在实例化 SCN 中启动。

命令:

OGG (https://oggdep.example.com:9100 oggdep as oggadmin) 12> ADD REPLICAT repprim EXTTRAIL bb CHECKPOINTTABLE oggadmin.checkpoints

输出:

2018-03-16T17:37:46Z INFO OGG-08100 REPLICAT added.

命令:编辑参数

OGG (https://oggdep.example.com:9100 oggdep as oggadmin) 13> EDIT PARAMS repprim

命令:

OGG (https://oggdep.example.com:9100 oggdep as oggadmin) 14> VIEW PARAMS repprim

输出:

--
--  R E P P R I M . p r m
--  Replicat Parameter File
--
Replicat    REPPRIM
USERIDALIAS oggadmin
Map         user01.*
  Target    user01.*;

命令:

OGG (https://oggdep.example.com:9100 oggdep as oggadmin) 15> START REPLICAT repprim ATCSN 1624963

输出:

2018-03-16T17:38:10Z  INFO    OGG-00975  REPLICAT REPPRIM starting
2018-03-16T17:38:10Z  INFO    OGG-15426  REPLICAT REPPRIM started