过程性复制

了解过程性复制以及如何对其进行配置。

关于过程复制

过程复制仅适用于 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 过程复制,您需要启用它。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。

要启用过程复制,请执行以下操作:

  1. 以 sys(sqlplus、sqlcl、sqldeveloper)身份而非 Oracle GoldenGate 管理员身份连接到数据库。

  2. 运行 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 提供了允许您启用或禁用过程补充日志记录的命令。

要启用补充日志记录,请执行以下操作:

  1. 使用 DBLOGIN 以 Oracle GoldenGate 管理员身份连接到源数据库。

    CONNECT https://localhost:9000 DEPLOYMENT demo AS ggadmin PASSWORD adminpw
    DBLOGIN USERIDALIAS ggeast DOMAIN OracleGoldenGate
  2. 添加过程复制的补充日志记录。

    ADD PROCEDURETRANDATA

    输出显示如下:

    INFO OGG-13005 PROCEDURETRANDATA supplemental logging has been enabled.

已为过程复制启用补充日志记录。

要禁用补充日志记录,请执行以下操作:

  1. 使用 dblogin 以 Oracle GoldenGate 管理员身份连接到源数据库。

    CONNECT https://localhost:9000 DEPLOYMENT demo AS ggadmin PASSWORD adminpw
    DBLOGIN USERIDALIAS ggeast DOMAIN OracleGoldenGate
  2. 删除过程中复制的补充日志记录。

    DELETE PROCEDURETRANDATA

对过程复制禁用了补充日志记录。

要查看有关补充日志记录的信息,请执行以下操作:

  1. 使用 dblogin 以 Oracle GoldenGate 管理员身份连接到源数据库。

    CONNECT https://localhost:9000 DEPLOYMENT demo AS ggadmin PASSWORD adminpw
    DBLOGIN USERIDALIAS ggeast DOMAIN OracleGoldenGate
  2. 显示过程复制的补充日志记录信息。

    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 中包括所有系统提供的软件包:

  1. 连接到源数据库中的提取。

    EXTRACT edba

    USERIDALIAS admin_dbA DOMAIN ORADEV

  2. 创建新线索文件。

    EXTTRAIL ea

  3. 启用过程复制(如果尚未完成)。

    TRANLOGOPTIONS INTEGRATEDPARAMS (ENABLE_PROCEDURAL_REPLICATION Y)

  4. 包括过程复制的过滤器。

    PROCEDURE INCLUDE FEATURE ALL_SUPPORTED

您已成功包括系统提供的用于过程复制的所有软件包。

在复制时排除特定软件包:

  1. 连接到目标数据库中的复制。

    REPLICAT rdba

    USERIDALIAS admin_dbBDOMAIN ORADEV

  2. 包括过程复制的过滤器。

    PROCEDURE EXCLUDE FEATURE RLS

您已成功排除用于过程复制的特定数据包。

处理过程复制错误

过程复制使用 REPERROR 参数来配置发生过程错误时的复制行为。

默认情况下,在执行过程性复制时复制将异常终止,因此使用以下步骤设置错误处理:

  1. 连接到目标数据库中的复制。

    REPLICAT rdba

    USERIDALIAS admin_dbBDOMAIN ORADEV

  2. 包括过程复制的过滤器。

    PROCEDURE EXCLUDE FEATURE RLS

  3. 指定错误处理参数,有关其他选项,请参见《 Parameters and Functions Reference for Oracle GoldenGate 》中的 REPERROR 。

    REPERROR (PROCEDURE, DISCARD)

您已成功处理过程复制的错误。

列出 Oracle GoldenGate 过程复制支持的过程

DBA_GG_SUPPORTED_PROCEDURES 视图显示有关 Oracle GoldenGate 过程性复制支持的软件包的信息。

当支持某个过程并且启用了 Oracle GoldenGate 过程复制时,除非明确排除该过程,否则将复制对该过程的调用。

  1. 以 sys(sqlplus、sqlcl、sqldeveloper)身份而非 Oracle GoldenGate 管理员身份连接到数据库。

  2. 查询 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 过程复制排除列表中的所有数据库对象的详细信息。

使用 DBMS_GOLDENGATE_ADM 软件包中的 INSERT_PROCREP_EXCLUSION_OBJ 过程将数据库对象添加到排除列表中。当数据库对象位于排除列表中时,如果子程序对排除的对象执行操作,则不会复制程序包的子程序 n 的执行。

  1. 以 sys(sqlplus、sqlcl 或 sqldeveloper)身份而非 Oracle GoldenGate 管理员身份连接到数据库。

  2. 查询与 Oracle GoldenGate 过程复制相关的视图。