Skip to content

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_NAMEVARCHAR新建的订阅者名称
PARTI_NOINTEGER分区号
FILTERVARCHAR过滤条件
POLL_LENBIGINT本次查询需要扫描的日志文件长度(字节)
KEEP_POSBOOLEAN是否移动当前分区的备份数据读取位置到本次读取结束位置
FNOINTEGER本次查询开始的文件号-1
FPOSBIGINT本次查询的开始文件内偏移量0
RET_TYPEINTEGER变更语句的返回方式(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