利用Logmnr实现Oracle增量订阅

查看Oracle归档状态

docker exec -it oracle /bin/bash
# 登陆数据库
sqlplus
# 查看归档状态
archive log list;

在这里插入图片描述
在这里插入图片描述

开启Oracle归档

-- 关闭数据库
shutdown immediate;
-- 启动数据库至mount状态
startup mount;
alter database archivelog;
alter database open;
archive log list;

在这里插入图片描述

开启附加日志

如果未开启附加日志则无法记录增量记录。

# 表级别开启附加日志
alter table 用户名.表名 add supplemental log data(all) columns;
# 库级别开启附加日志
alter database add supplemental log data(all) columns;
alter database add supplemental log data;

使用LOGMNR查看增量数据

此处使用的解析字典是在线解析字典,可省略多个操作步骤。

获取要解析的日志文件

select member from v$logfile;

在这里插入图片描述

此处也可只获取当前日志文件,但可能存在增量分布不均导致获取增量丢失的情况。

SQL> SELECT member from v$logfile where group# = (SELECT group# as g FROM v$log  where status = 'CURRENT');

添加日志文件

添加的第一个日志文件需使用options=>dbms_logmnr.NEW,后续日志文件使用options=>dbms_logmnr.ADDFILE

SQL>EXEC dbms_logmnr.add_logfile(logfilename=>'/u01/app/oracle/oradata/xe/redo03.log',options=>dbms_logmnr.NEW);
SQL>EXEC dbms_logmnr.add_logfile(logfilename=>'/u01/app/oracle/oradata/xe/redo02.log',options=>dbms_logmnr.ADDFILE);
SQL>EXEC dbms_logmnr.add_logfile(logfilename=>'/u01/app/oracle/oradata/xe/redo01.log',options=>dbms_logmnr.ADDFILE);

启动日志解析

当前scn可通过select current_scn from v$database获取,也可以从查询到的增量记录数中获取。

SQL> EXEC dbms_logmnr.start_logmnr(options=>dbms_logmnr.DICT_FROM_ONLINE_CATALOG, startScn=>xxxx, endScn=>xxxx);

读取增量记录

-- seg_name为表名,sql_redo为增量记录的原生SQL语句
SQL> SELECT seg_name, operation, sql_redo, timestamp, scn FROM v$logmnr_contents WHERE seg_owner = ‘xxxx’ and operation in ('UPDATE', 'DELETE', 'INSERT');

关闭增量解析

SQL> EXEC dbms_logmnr.end_logmnr;

上述操作均基于Oracle容器,实际Oracle服务器需根据配置调整操作。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值