POLL_MODIFY_DATA
接口/方法功能
变更记载日志以二进制形式存在,需要通过POLL_MODIFY_DATA特定的接口来特别解析处理,POLL_MODIFY_DATA可满足多种消费BINLOG日志的消费模式,最终会以明文的形式将BINLOG中的内容展现出来;需要注意的是POLL_MODIFY_DATA接口仅可以在具有GATHER属性的节点上执行(单机自带GATHER属性),在任何非GATHER节点之外的其它节点上发起的执行请求均会被无条件中断。
接口/方法声明
PROCEDURE POLL_MODIFY_DATA (
SUBSCRIBER_NAME VARCHAR,
PARTI_NO INTEGER,
FILTER VARCHAR,
POLL_LEN BIGINT,
KEEP_POS BOOLEAN,
FNO INTEGER DEFAULT -1,
FPOS BIGINT DEFAULT 0,
RET_TYPE INTEGER DEFAULT 0
);
参数说明
参数名称 | 参数类型 | 参数解释 | 默认值 |
---|---|---|---|
SUBSCRIBER_NAME | VARCHAR | 新建的订阅者名称 | 无 |
PARTI_NO | INTEGER | 分区号 | 无 |
FILTER | VARCHAR | 过滤条件 | 无 |
POLL_LEN | BIGINT | 本次查询需要扫描的日志文件长度(字节) | 无 |
KEEP_POS | BOOLEAN | 是否移动当前分区的备份数据读取位置到本次读取结束位置 | 无 |
FNO | INTEGER | 本次查询开始的文件号 | -1 |
FPOS | BIGINT | 本次查询的开始文件内偏移量 | 0 |
RET_TYPE | INTEGER | 变更语句的返回方式(0: SQL和二进制原始数据; 1:只返回SQL; 2:只返回二进制原始数据) | 0 |
操作示例
从0号分区0号日志的头部开始解析长度为10MB的内容,查找obj_id=1048577的所有DDL/DML操作。
sql
EXEC DBMS_REPLICATION.POLL_MODIFY_DATA('test',0,'obj_id=1048577',10*1024*1024,true,0,0,1);
结果集
调用DBMS_REPLICATION.POLL_MODIFY_DATA
后会返回指定变更日志PARTI_NO
分区中POLL_LEN
指定长度的数据内容,数据内容格式将以结果集的形式展示,其结果集的表结构定义详见下表。
字段名称 | 描述 |
---|---|
TRAN_ID | 事务号 |
ACTION | 变更动作 |
PARTI_NO | 分区号 |
SRC_NID | 变更消息来源节点号 |
DB_ID | 数据库ID |
OBJ_ID | 受变更影响的对象ID |
DILIVER_TIME | 变更消息产生时间 |
COMMIT_TIME | 所属事务提交时间 |
FNO | 变更日志文件编号 |
FPOS | 当前变更内容在FNO指定的变更日志中的起始位置 |
LOB_NUM | 大对象字段数量(失效) |
DAT_LEN | 原始变更内容数据长度 |
DATA | 原始变更内容 |
SQL | 变更语句 |
SQL_UNDO | 变更语句对应的UNDO |