在 Oracle Data Guard 的逻辑 Standby 数据库环境中,有时出于特定的应用架构或数据管理需求,我们需要阻止某些表的更改从主库同步到备库。例如,可能需要在备库上对某些报表表进行独立的维护操作,而不希望主库的DML操作将其覆盖。
那么,若要实现在逻辑 Standby 端跳过对某张表的指定 DML 操作(INSERT, UPDATE, DELETE),应该使用以下哪个工具?
A、ALTER DATABASE SKIP
B、DBMS_LOGSTDBY.SKIP
C、无需配置,自动跳过不支持的操作
D、LOG_ARCHIVE_DEST_n 的 SKIP 属性
正确答案与解析
正确答案是 B、DBMS_LOGSTDBY.SKIP。
DBMS_LOGSTDBY 是 Oracle 提供的一个用于管理逻辑 Standby 数据库的内置PL/SQL包。其中的 SKIP 过程正是专门用于在逻辑 Standby 端配置“跳过”规则的核心工具。
基本语法如下:
BEGIN
DBMS_LOGSTDBY.SKIP(
stmt => 'DML', -- 要跳过的语句类型,如 ‘DML’, ‘SCHEMA_DDL’
schema_name => ‘SCOTT’, -- 表所属的用户名
object_name => ‘EMP’, -- 需要跳过的表名
proc_name => NULL -- 可选,用于更复杂处理的自定义过程名
);
END;
/
执行此过程后,逻辑 Standby 数据库的 SQL Apply 进程将不再应用主库对指定表(如 SCOTT.EMP)发出的 DML 操作,从而实现了“跳过”。
其他选项解析
- A、ALTER DATABASE SKIP:此语句不存在,
ALTER DATABASE 命令主要用于修改数据库的物理属性或状态,不用于控制逻辑 Standby 的 SQL Apply 规则。
- C、无需配置,自动跳过不支持的操作:逻辑 Standby 的 SQL Apply 进程会尝试应用所有从主库接收到的、在备库支持的操作。对于明确需要跳过的操作,必须进行手动配置,不会自动跳过。
- D、LOG_ARCHIVE_DEST_n 的 SKIP 属性:该属性用于配置物理 Standby 环境中的日志传输,例如
SKIP 选项可用于跳过指定数据库对象的日志应用,但其主要作用于物理级别的日志块,不适用于控制逻辑 Standby 中基于 SQL 语句的精确跳过,且语法和用途与题目所述场景不符。
因此,在逻辑 Standby 中精细控制对某张表的 DML 操作同步,必须使用 DBMS_LOGSTDBY.SKIP 过程进行配置。
|