使用LogMiner读取DG备库的归档日志-LogMiner字典静态文件
当LogMiner需要挖掘归档redo数据时,需要一个字典来将对象id转换为对象名称。在这里,Logminer提供三个字典选项
1、使用online catalog
2、提取logminer字典信息到redo log file文件中
3、提取logminer字典信息到静态文件(flat file),在19c版本官网文档有详细描述如何使用,但是在21c开始已经不支持该功能。
下面的案例将以提取logminer字典信息到静态文件为例,展示logMiner如何操作。
查看当前的归档模式
由于当前环境使用的dg库,所以主备库的归档模式已经开启。
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /data3/data
Oldest online log sequence 6003
Next log sequence to archive 6005
Current log sequence 6005
创建存放字典文件目录
--查询当前库的字典目录是否创建
SELECT * FROM DBA_DIRECTORIES WHERE DIRECTORY_NAME ='DICT_DIR';
--如果没有创建则执行如下命令
mkdir -p /data3/dictdata
chown -R oracle:dba /data3/dictdata
CREATE directory dict_dir AS '/data3/dictdata';
确认开启数据库的附加日志
--查询结果为YES,则表示已经开启
SELECT supplemental_log_data_min FROM v$database;
SUPPLEME
--------
YES
如果查询结果显示为NO,则执行如下命令
alter database add supplemental log data;
开启待同步表的日志补充
--开启待同步表的日志补充,需针对每一张表进行设置,如果不做该设置,对于挖掘的数据可能有误。
ALTER TABLE TEST.T2 ADD SUPPLEMENTAL LOG DATA(ALL,PRIMARY KEY,UNIQUE,FOREIGN KEY) COLUMNS;
更新数据,验证挖掘的数据
UPDATE TEST.T2 SET NAME = 'lier' WHERE PID = 25421;
挖掘LogMiner字典信息到文件
--DICT_DIR在第一步创建
EXECUTE dbms_logmnr_d.build(dictionary_location=>'DICT_DIR', -
dictionary_filename=>'dictionary.ora',OPTIONS=>dbms_logmnr_d.store_in_flat_file);
添加要分析的日志文件
--查询最新的归档日志文件名称
SELECT SEQUENCE#, name,first_time,next_time FROM v$archived_log WHERE FIRST_time >= to_date('2024-01-16 14:00:00','yyyy-mm-dd hh24:mi:ss') ORDER BY FIRST_time DESC;
--添加归档日志文件
EXECUTE dbms_logmnr.add_logfile(logfilename=>'/data3/oracle/archdata/archivelog/1_6004_1045340148.dbf',OPTIONS=>dbms_logmnr.NEW);
启动logminer
EXECUTE dbms_logmnr.start_logmnr(dictfilename=>'/data3/dictdata/dictionary.ora', OPTIONS=>dbms_logmnr.no_rowid_in_stmt);
查询挖掘的日志信息
SELECT xidusn|| '.'||xidslt||'.'||xidsqn AS xid,username,sql_redo FROM v$logmnr_contents WHERE seg_owner IN ('TEST') and username!='SYS';
查询结果信息展示
SQL> SELECT xidusn|| '.'||xidslt||'.'||xidsqn AS xid,username,sql_redo FROM v$logmnr_contents WHERE seg_owner IN ('TEST') and username!='SYS';
XID
--------------------------------------------------------------------------------
USERNAME
--------------------------------------------------------------------------------
SQL_REDO
--------------------------------------------------------------------------------
18.0.209830
HXBTEST
update "TEST"."T2" set "NAME" = 'lier' where "PID" = '25421' and "NAME" = 'sunla
oshi';
结束日志挖掘
EXECUTE dbms_logmnr.END_LOGMNR();
– / END / –
可以通过下面的方式联系我
如果这篇文章为你带来了灵感或启发,就请帮忙点赞、收藏、转发;如果文章中不严谨或者错漏之处,请及时评论指正。非常感谢!
最后修改时间:2025-02-06 11:02:40
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




