前言

日志挖掘操作时在数据库的异常恢复,数据问题的追踪分析等场景会用到的一种技术,在达梦数据库,用户可以使用 DBMS_LOGMNR 包对归档日志进行挖掘,重构出 DDL 和 DML 等操作,并通过获取的信息进行更深入的分析。

以下案例是将归档日志文件导出,拿到本地测试数据库进行挖掘的操作步骤。


一、本地数据库参数修改

本地的测试服务器需要开启归档和逻辑追加日志两个参数

select para_name, para_value from v$dm_ini 
where para_name in ('ARCH_INI','RLOG_APPEND_LOGIC');

在这里插入图片描述

二、查询本地数据库的DB_MAGIC

查询DB_MAGIC,记录下来,后面会用到

SELECT DB_MAGIC FROM V$RLOG;

在这里插入图片描述

三、修改归档日志中的DB_MAGIC

由于归档日志是从其他数据库中导出的,DB_MAGIC值和本地测试数据库的DB_MAGIC值不相同,需要通过dmmdf命令进行修改。

进入到数据库的bin目录
windows环境:
.\dmmdf.exe TYPE=2 FILE=E:\ARCHIVE\ARCHIVE0910\ARCHIVE_LOCAL1_0x70272D40[0]_2022-09-10_05-24-07.log

linux环境
./dmmdf TYPE=2 FILE=/dm/arch_bak/ARCHIVE_LOCAL1_0x7C4075D0[0]_2022-07-11_06-17-37.log

执行命令后会打印出当前这个归档日志的文件信息,主要关注第6行 db_magic,在命令行输入 6 ,即可对第6行的数据进行修改。
在这里插入图片描述
输入的新值,就是在上一步通过sql查询出来本地库的db_magic数值。 输入完成回车,
在这里插入图片描述
Y确认保存
在这里插入图片描述

如果涉及到多个归档日志的挖掘,每个归档日志文件都要按照上面的步骤进行修改

四、开始日志挖掘

1.创建DBMS_LOGMNR包

#只需要创建一次不要重复创建
SP_CREATE_SYSTEM_PACKAGES (1,'DBMS_LOGMNR');

2.加载归档日志

DBMS_LOGMNR.ADD_LOGFILE('E:\ARCHIVE\ARCHIVE0913\ARCHIVE_LOCAL1_0x70272D40[0]_2022-09-09_14-38-47.log');
DBMS_LOGMNR.ADD_LOGFILE('E:\ARCHIVE\ARCHIVE0913\ARCHIVE_LOCAL1_0x70272D40[0]_2022-09-09_14-39-05.log');

可以添加多个归档日志文件

通过查询V$LOGMNR_LOGS可以查看已经添加的归档日志,不能重复添加归档日志
select * from V$LOGMNR_LOGS

3.开始挖掘

DBMS_LOGMNR.START_LOGMNR(OPTIONS=>2130, STARTTIME=>TO_DATE('2022-07-30 17:00:00','YYYY-MM-DD HH24:MI:SS') , ENDTIME=>TO_DATE('2022-07-30 19:00:00','YYYY-MM-DD HH24:MI:SS'))

OPTIONS 指定挖掘的操作选项
STARTTIME / ENDTIME 指定挖掘的时间范围,不指定就是挖掘全部

OPTIONS具体数值的含义,通过数值的累计选择相应的挖掘选项。
2 — 仅从已交的事务的日志中挖掘信息
16 — 使用在线字典
64 — 拼写的 SQL 语句最后不添加分隔符
2048 — 拼写的 SQL 语句中不包含 ROWID

例如:
OPTIONS=>2130 就是2048+64+16+2
OPTIONS=>2128 就是2048+64+16 (未提交日志也会被显示出来)

4.查看结果

SELECT * FROM V$LOGMNR_CONTENTS;
--可以增加过滤条件,精确的查找想要的数据
SELECT * FROM V$LOGMNR_CONTENTS   where sql_redo like 'drop%';

5.结束本次挖掘

#如果需要重新开始挖掘,需要先关闭后再进行新的挖掘
dbms_logmnr.end_logmnr()

日志挖掘是会话级的操作,关闭会话也可以达到相同的效果


达梦技术社区地址:https://eco.dameng.com

更多推荐