暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

使用LogMiner读取DG备库的归档日志-LogMiner字典静态文件

原创 墨竹 2024-01-16
669

使用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 / –

可以通过下面的方式联系我

  • 微信公众号:@墨竹札记
  • 墨天轮:@墨竹
  • 微信:wshf395062788
  • PGFans:@墨竹

如果这篇文章为你带来了灵感或启发,就请帮忙点赞收藏转发;如果文章中不严谨或者错漏之处,请及时评论指正。非常感谢!

最后修改时间:2025-02-06 11:02:40
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论