Oracle Goleden Gate 复制存储过程

1.1. 关于存储过程复制

ogg 允许复制 PL/SQL 过程.避免了传输这些操作生成的大批量数据.存储过程复制使用dirctionary 的更改来实现.这些directionary 控制用户的会话行为和 对象.

过程复制与create ,alter 和drop 语句的同步无关,而是复制调用 存储过程的调用.如:

CALL procedure_name(arg1, arg2, ...);
exec procedure_name(arg1, arg2, ...)

如果使用存储过程复制,则需要满足以下条件:

1.2. 概述

复制过程调用时,确保记录封装乐足够的信息.

使用ogg 过程调用复制,需要启用一种内置机制标识和优化启用过程.

PL/SQL pargmas 用于指定复制哪些调用的过程.当pragma 指定时,启动或回调logminer 时,回调函数返回调用的名称和参数.并指出调用是否成功.logminer 使用回调信息增强redo 日志信息.对于支持的调用信息,调用的过程将不会生成redo ,只是再目标端重新执行命令.

对于trail 记录文件 启用一个新的标识 ,用来标识过程复制.这个跟踪记录利用现有的trail .将参数传递给PL/SQL 过程.对于LOB ,数据以块的形式传递.由于trail 里包含足够的信息,可以在目标闪重新执行存储过程.

1.3. 启用复制存储调用

默认情况下禁用过程复制.可以使用 TRANLOGOPTIONS 选项的 enable_programural_replication 设置为yes 启用.

当启用复制存储调用选项时,将一直保持打开状态,且不能被禁用.

如果再Oracle database vault 环境中使用ogg 复制存储调用功能,则需要设置适当权限.

启用步骤:

  1. 确保出处于无触发器模式,
  2. dblogin 以oggadmin 用户连接到源数据库.
  3. 设置 TRANLOGOPTIONS 参数设置为yes.
TRANLOGOPTIONS INTEGRATEDPARAMS (ENABLE_PROCEDURAL_REPLICATION Y)

1.4. 确认是否打开过程复制

使用 DMS_GOLDENGATE_ADM 包中的 gg_processdure_replication_on 函数来确定.

要启用复制存储调用复制:

  1. 以sys 身份连接到数据库.

  2. 执行 gg_processdure_replication_on 函数

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;
/

1.5. 启用和禁用补充日志记录

ogg 提供乐ggsci 命令,允许您启用或禁用过程补充日志记录.
启用补充日志记录.

  1. dblogin 用户 ggadmin .
  2. 增加过程附加日志.
ADD PROCEDURETRANDATA

禁用附加日志:

DELETE PROCEDURETRANDATA

查看附加日志:

INFO PROCEDURETRANDATA

1.6. 过滤复制存储过程调用

可以使用参数指定包含或者排除哪些存储过程复制.

使用特性组对包和过程进行分组.

再存储过程参数中,INCLUDEEXCLUDE 指定筛选的开头.由这些参数指定包含或排除存储过程.筛选字句必须由 INCLUDE ALL_SUPPORTED EXCLUDE ALL_SUPPORTED 关键字组成. EXCLUDE 有限级高于包含相同条件的 INCLUDE 字句.

注意:复制Oracle Strams Advanced Queue(AQ) 存储过程时,必须再参数文件中使用RULE 选项.

PROCEDURE INCLUDE FEATURE ALL_SUPPORTED

or

PROCEDURE INCLUDE FEATURE AQ, RULE

如果没有 选项规则,请不要使用 PROCEDURE INCLUDE .

1.6.1. 包含系统所有的存储过程

  1. 连接到源数据库
EXTRACT edba
USERIDALIAS admin_dbA DOMAIN ORADEV
  1. 创建trail 文件
EXTTRAIL ea
  1. 添加参数文件
TRANLOGOPTIONS INTEGRATEDPARAMS (ENABLE_PROCEDURAL_REPLICATION Y)
  1. 添加参数文件
PROCEDURE INCLUDE FEATURE ALL_SUPPORTED
  1. 排除所有包
  2. 连接到数据库
REPLICAT rdba
  1. 登录数据库
USERIDALIAS admin_dbBDOMAIN ORADEV

3.排除所有存储过程

PROCEDURE EXCLUDE FEATURE RLS

1.7. 处理存储过程错误

当存储过程错误发生时, 使用 programror 参数配置replciat 行为.默认情况下如果错误发生则replicat 将会终止,使用以下步骤处理错误.

  1. 连接到数据库
REPLICAT rdba
USERIDALIAS admin_dbBDOMAIN ORADEV
  1. 排除报错的存储过程.
PROCEDURE EXCLUDE FEATURE RLS
  1. 处理错误参数
REPERROR (PROCEDURE, DISCARD)

1.8. 查询受支持的存储过程

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;`

1.9. 监控ogg 存储过程复制

View Description
DBA_GG_SUPPORTED_PACKAGES Provides details about supported packages for Oracle GoldenGate procedural replication.When a package is supported and Oracle GoldenGate procedural replication is on, calls to subprograms in the package are replicated.
DBA_GG_SUPPORTED_PROCEDURES Provides details about the procedures that are supported for Oracle GoldenGate procedural replication.
DBA_GG_PROC_OBJECT_EXCLUSION Provides details about all database objects that are on the exclusion list for Oracle GoldenGate procedural replication.A database object is added to the exclusion list using the INSERT_PROCREP_EXCLUSION_OBJ procedure in the DBMS_GOLDENGATE_ADM package. When a database object is on the exclusion list, execution of a subprogram n the package is not replicated if the subprogram operates on the excluded object.