过程性复制
了解过程性复制以及如何对其进行配置。
关于过程复制
过程复制仅适用于 Oracle AI Database。Oracle GoldenGate 使用过程复制来复制 Oracle AI Database 提供的 PL/SQL 过程,避免了通常由这些操作生成的大量记录的传送和应用。过程复制实施字典更改,以控制用户和会话行为以及字典中对象的交换。
过程复制与 CREATE、ALTER 和 DROP 语句(或 DDL)的复制无关,而是过程调用的复制,如下所示:
CALL *procedure_name*(*arg1*, *arg2*, ...);
与此相反:
exec *procedure_name*(*arg1*, *arg2*, ...)
启用过程性复制后,对一个数据库上 Oracle AI Database 提供的程序包中的过程的调用将复制到一个或多个其他数据库,然后在这些数据库上执行。例如,调用 DBMS_REDEFINITION 程序包中的子程序可以对表执行联机重新定义。如果该表在多个数据库中复制,并且您希望对每个数据库的表执行相同的联机重新定义,则可以在一个数据库中调用 DBMS_REDEFINITION 程序包中的子程序,Oracle GoldenGate 可以将这些调用复制到其他数据库。
要支持过程复制,应配置您的 Oracle AI Database 以标识为此优化启用的过程。
要使用过程性复制,必须满足以下先决条件:
-
带提取和复制功能的 Oracle GoldenGate。
-
系统提供的程序包仅与 DML 和 DDL 组合使用。
过程复制过程概述
过程复制使用线索记录来确保记录中封装了足够的信息。
要使用 Oracle GoldenGate 过程复制,您需要启用它。Oracle AI Database 必须具有内置机制来标识为此优化启用的过程。
PL/SQL pragma 用于指示可以复制哪些过程。指定 pragma 时,会在进入时对 Logminer 进行回调,然后从例程退出。回调提供过程调用和参数的名称,并指示过程是成功退出还是出错。Logminer 使用回调中的信息来增强重做流。对于支持的过程,将禁止该过程生成的常规重做,并且仅复制过程调用。
将生成新的线索记录来标识过程性复制。此线索记录将现有线索列数据格式用于传递到 PL/SQL 过程的参数。对于 LOB,数据以类似于 LOB 的现有线索格式的块形式传递。此线索记录具有足够的信息,可以按原样在目标上重放过程。
启用过程复制时,它将阻止将受过程影响的单个记录写入到线索文件中。
如果应用 PL/SQL 过程时遇到错误,则 Replicat 可以重放整个 PL/SQL 过程。
确定过程复制是否打开
使用 DBMS_GOLDENGATE_ADM 数据包中的 GG_PROCEDURE_REPLICATION_ON 函数确定 Oracle GoldenGate 过程复制是打开还是关闭。
如果您希望在 Oracle AI Database Vault 环境中通过过程复制使用 Oracle GoldenGate,则必须设置相应的权限。请参阅 Oracle AI Database Vault Administrator’s Guide。
要启用过程复制,请执行以下操作:
-
以
sys(sqlplus、sqlcl、sqldeveloper)身份而非 Oracle GoldenGate 管理员身份连接到数据库。 -
运行
GG_PROCEDURE_REPLICATION_ON函数。
运行 GG_PROCEDURE_REPLICATION_ON 函数的示例 9-1
SET SERVEROUTPUT ON
DECLARE
on_or_off NUMBER;
BEGIN
on_or_off := DBMS_GOLDENGATE_ADM.GG_PROCEDURE_REPLICATION_ON;
IF on_or_off=1 THEN
DBMS_OUTPUT.PUT_LINE('Oracle GoldenGate procedural replication is ON.');
ELSE
DBMS_OUTPUT.PUT_LINE('Oracle GoldenGate procedural replication is OFF.');
END IF;
END;
/
启用和禁用补充日志记录
Oracle GoldenGate 提供了允许您启用或禁用过程补充日志记录的命令。
要启用补充日志记录,请执行以下操作:
-
使用
DBLOGIN以 Oracle GoldenGate 管理员身份连接到源数据库。CONNECT https://localhost:9000 DEPLOYMENT demo AS ggadmin PASSWORD adminpwDBLOGIN USERIDALIAS ggeast DOMAIN OracleGoldenGate -
添加过程复制的补充日志记录。
ADD PROCEDURETRANDATA输出显示如下:
INFO OGG-13005 PROCEDURETRANDATA supplemental logging has been enabled.
已为过程复制启用补充日志记录。
要禁用补充日志记录,请执行以下操作:
-
使用 dblogin 以 Oracle GoldenGate 管理员身份连接到源数据库。
CONNECT https://localhost:9000 DEPLOYMENT demo AS ggadmin PASSWORD adminpwDBLOGIN USERIDALIAS ggeast DOMAIN OracleGoldenGate -
删除过程中复制的补充日志记录。
DELETE PROCEDURETRANDATA
对过程复制禁用了补充日志记录。
要查看有关补充日志记录的信息,请执行以下操作:
-
使用 dblogin 以 Oracle GoldenGate 管理员身份连接到源数据库。
CONNECT https://localhost:9000 DEPLOYMENT demo AS ggadmin PASSWORD adminpwDBLOGIN USERIDALIAS ggeast DOMAIN OracleGoldenGate -
显示过程复制的补充日志记录信息。
INFO PROCEDURETRANDATA
此时将显示过程复制的补充日志记录信息。
过滤过程复制的功能
可以指定要为过程复制包括或排除的过程和数据包。
使用功能组对支持的软件包和过程进行分组。可将过程参数与 INCLUDE 或 EXCLUDE 关键字一起使用来筛选过程复制的功能。
在过程参数中,INCLUDE 或 EXCLUDE 指定筛选子句的开头。它们指定要复制的过程 (INCLUDE) 或过滤掉的过程 (EXCLUDE)。过滤子句必须包含 INCLUDE ALL_SUPPORTED 或 EXCLUDE ALL_SUPPORTED 关键字,后跟过程参数的其他过滤选项的任何有效组合。EXCLUDE 过滤器优先于包含相同条件的任何 INCLUDE 过滤器。
<div class="infoboxnote" markdown="1">
**Note:**
When replicating Oracle Streams Advanced Queuing (AQ) procedures, you must use the `RULE` option in your parameter file as follows:
`PROCEDURE INCLUDE FEATURE ALL_SUPPORTED`
or
`PROCEDURE INCLUDE FEATURE AQ, RULE`
Do *not* use `PROCEDURE INCLUDE FEATURE AQ` without the `RULE` option.
</div>
在 Extract 中包括所有系统提供的软件包:
-
连接到源数据库中的提取。
EXTRACT edbaUSERIDALIAS admin_dbA DOMAIN ORADEV -
创建新线索文件。
EXTTRAIL ea -
启用过程复制(如果尚未完成)。
TRANLOGOPTIONS INTEGRATEDPARAMS (ENABLE_PROCEDURAL_REPLICATION Y) -
包括过程复制的过滤器。
PROCEDURE INCLUDE FEATURE ALL_SUPPORTED
您已成功包括系统提供的用于过程复制的所有软件包。
在复制时排除特定软件包:
-
连接到目标数据库中的复制。
REPLICAT rdbaUSERIDALIAS admin_dbBDOMAIN ORADEV -
包括过程复制的过滤器。
PROCEDURE EXCLUDE FEATURE RLS
您已成功排除用于过程复制的特定数据包。
处理过程复制错误
过程复制使用 REPERROR 参数来配置发生过程错误时的复制行为。
默认情况下,在执行过程性复制时复制将异常终止,因此使用以下步骤设置错误处理:
-
连接到目标数据库中的复制。
REPLICAT rdbaUSERIDALIAS admin_dbBDOMAIN ORADEV -
包括过程复制的过滤器。
PROCEDURE EXCLUDE FEATURE RLS -
指定错误处理参数,有关其他选项,请参见《 Parameters and Functions Reference for Oracle GoldenGate 》中的
REPERROR。REPERROR (PROCEDURE, DISCARD)
您已成功处理过程复制的错误。
列出 Oracle GoldenGate 过程复制支持的过程
DBA_GG_SUPPORTED_PROCEDURES 视图显示有关 Oracle GoldenGate 过程性复制支持的软件包的信息。
当支持某个过程并且启用了 Oracle GoldenGate 过程复制时,除非明确排除该过程,否则将复制对该过程的调用。
-
以
sys(sqlplus、sqlcl、sqldeveloper)身份而非 Oracle GoldenGate 管理员身份连接到数据库。 -
查询
DBA_GG_SUPPORTED_PROCEDURES视图。
示例 9-2 显示有关 Oracle GoldenGate 过程复制支持的软件包的信息
此查询显示有关软件包的以下信息:
-
每个程序包的所有者
-
每个程序包的名称
-
每个过程的名称
-
支持该过程的最小数据库发行版
-
是否存在阻止为某些数据库对象复制过程的排除规则
COLUMN OWNER FORMAT A10
COLUMN PACKAGE_NAME FORMAT A15
COLUMN PROCEDURE_NAME FORMAT A15
COLUMN MIN_DB_VERSION FORMAT A14
COLUMN EXCLUSION_RULE_EXISTS FORMAT A14
SELECT OWNER,
PACKAGE_NAME,
PROCEDURE_NAME,
MIN_DB_VERSION,
EXCLUSION_RULE_EXISTS
FROM DBA_GG_SUPPORTED_PROCEDURES;
您的输出与以下内容类似:
OWNER PACKAGE_NAME PROCEDURE_NAME MIN_DB_VERSION EXCLUSION_RULE
---------- --------------- --------------- -------------- --------------
XDB DBMS_XDB_CONFIG ADDTRUSTMAPPING 12.2 NO
CTXSYS CTX_DDL ALTER_INDEX 12.2 NO
SYS DBMS_FGA DROP_POLICY 12.2 NO
SYS XS_ACL DELETE_ACL 12.2 NO
.
.
.
监视 Oracle GoldenGate 过程复制
使用一组数据字典视图可以监视 Oracle GoldenGate 过程复制。
可以使用以下视图监视 Oracle GoldenGate 过程性复制:
| 视图 | 说明 |
|---|---|
DBA_GG_SUPPORTED_PACKAGES |
提供有关 Oracle GoldenGate 过程性复制支持的软件包的详细信息。 支持数据包并启用 Oracle GoldenGate 过程性复制时,将复制对数据包中子程序的调用。 |
DBA_GG_SUPPORTED_PROCEDURES |
提供有关 Oracle GoldenGate 过程复制支持的过程的详细信息。 |
DBA_GG_PROC_OBJECT_EXCLUSION |
提供有关 Oracle GoldenGate 过程复制排除列表中的所有数据库对象的详细信息。 使用 |
-
以
sys(sqlplus、sqlcl或sqldeveloper)身份而非 Oracle GoldenGate 管理员身份连接到数据库。 -
查询与 Oracle GoldenGate 过程复制相关的视图。