
1.前言
在数据库运维使用过程中,归档日志处理是常见的运维场景之一。通过分析归档日志,可以解决多种实际问题: 如数据误操作追踪
当发生数据误删除且无法确定具体时间范围或操作语句时,可以利用日志分析工具对归档日志进行挖掘,准确定位问题发生的时段及相关操作,为数据恢复提供依据。DBMS_LOGMNR是达梦数据库提供的日志挖掘系统包,能够高效地对归档日志进行分析,重构出DDL
、DML
和DCL
等操作记录,为数据库审计和操作跟踪提供强有力的支持。用户可以通过该包对归档日志进行深度挖掘,获取详细的操作信息,进而开展更深入的分析。
使用注意事项:
1. 环境限制
DM MPP
环境下不支持DBMS_LOGMNR
包DMDPC
环境下,DBMS_LOGMNR.ADD_LOGFILE
仅支持添加同一节点的多个日志进行分析,不支持跨节点日志分析
2. 配置要求
使用DBMS_LOGMNR
前,需确保:
已配置数据库归档 将 dm.ini
中的RLOG_APPEND_LOGIC
参数设置为 1、2、3 或 4
3.日志分析流程如下

2.案例演示
使用包内的过程和函数之前,如果还未创建过系统包,请先调用系统过程创建系统包。(整个过程只能在当前同一会话操作)
SP_CREATE_SYSTEM_PACKAGES (1,'DBMS_LOGMNR');
2.1. 配置归档
alter database mount;
alter database add archivelog 'dest=/dmdata/arch,type=local,file_size=500,space_limit=10240';
alter database archivelog;
alter database open;
确保数据库处于归档日志模式下,通过以下方法检查数据库是否处于归档日志模式。

2.2.检查dm.ini参数
select para_name, para_value from v$dm_ini where para_name in ('ARCH_INI','RLOG_APPEND_LOGIC');
使用如下语句查询 RLOG_APPEND_LOGIC 和 ARCH_INI 是否为 1,保证数据库已开
2.3.构造测试数据
创建测试数据,开一个新窗口创建测试表
create table t_test(idint, namevarchar(50));
begin
for i in1..5000loop
insertinto t_test(id, name) values(i, DBMS_RANDOM.string('A', 20));
commit;
endloop;
end;
/
selectcount(*) from t_test;
createtable t_test1(idint, namevarchar(50));
begin
for i in1..5000loop
insertinto t_test1(id, name) values(i, DBMS_RANDOM.string('A', 20));
commit;
endloop;
end;
/
selectcount(*) from t_test1;
createtable t_test2(idint, namevarchar(50));
begin
for i in1..5000loop
insertinto t_test2(id, name) values(i, DBMS_RANDOM.string('A', 20));
commit;
endloop;
end;
/
selectcount(*) from t_test2;
createtable t_test4(idint, namevarchar(50));
begin
for i in1..5000loop
insertinto t_test4(id, name) values(i, DBMS_RANDOM.string('A', 20));
commit;
endloop;
end;
/
selectcount(*) from t_test4;
alterSYSTEMARCHIVELOGCURRENT;
alterSYSTEMSWITCHLOGFILE;
alterDATABASEARCHIVELOGCURRENT;
2.4. 添加归档日志文件
(1) 查询有哪些归档日志
select name , first_time , next_time , first_change# , next_change# from v$archived_log;
查询结果如下:
(2) 添加一个或多个需要分析的归档日志文件
批量添加日志方法,使用拼接方式处理
[dmdba@dm92 dmarch]$ for i in `ls`;do echo DBMS_LOGMNR.ADD_LOGFILE\(\'"/dm/dmarch/"$i\'\)\;;done
DBMS_LOGMNR.ADD_LOGFILE('/dm/dmarch/ARCHIVE_LOCAL1_0x303D49C2[0]_2022-12-19_13-58-14.log');
DBMS_LOGMNR.ADD_LOGFILE('/dm/dmarch/ARCHIVE_LOCAL1_0x303D49C2[0]_2022-12-19_14-12-22.log');
DBMS_LOGMNR.ADD_LOGFILE('/dm/dmarch/ARCHIVE_LOCAL1_0x303D49C2[0]_2022-12-19_14-15-22.log');
[dmdba@dm92 dmarch]$
登录disql或者使用达梦管理工具添加日志
DBMS_LOGMNR.ADD_LOGFILE('/dm/dmarch/ARCHIVE_LOCAL1_0x303D49C2[0]_2022-12-19_13-58-14.log');
如要查看通过 ADD_LOGFILE 添加的归档日志文件,可以通过动态视图 V$LOGMNR_LOGS 进行查询,如下:
select low_scn, next_scn, low_time, high_time, log_id, filename from v$logmnr_logs;

2.5.启动归档日志文件分析
DBMS_LOGMNR.START_LOGMNR(OPTIONS=>2048);
--可以指定时间段分析日志
DBMS_LOGMNR.START_LOGMNR(Options=>2128 , Starttime=>to_date('2014-03-04 17:36:00','YYYY-MM-DD HH24:MI:SS') ,
Endtime=>to_date('2014-06-04 17:36:02','YYYY-MM-DD HH24:MI:SS'));
如下所示:
查看归档日志文件的分析结果,可以通过动态视图V$LOGMNR_CONTENTS
进行查询,如下所示:
select * from V$LOGMNR_PARAMETERS;
select * from V$LOGMNR_CONTENTS limit 0,100;
还可以根据条件拼接查询
查询相应语句使用频率
select
operation,
SEG_OWNER,
username,
DATA_OBJ#,
COUNT(operation) COUNT_DESC
from
V$LOGMNR_CONTENTS
groupby
operation,
SEG_OWNER,
username,
DATA_OBJ#
ORDERBY
COUNT_DESC DESC;
将获取的信息取出,复制到源库中,查询对应的表名,模式名,用户名
select * from sysobjects where id in ('150994945','50331649','1054','5000');
或者直接查询视图也能获得很多信息
select * from V$LOGMNR_CONTENTS limit 0,100;
2.6.终止归档日志文件分析
DBMS_LOGMNR.END_LOGMNR();

往期分享
安装部署
1.分享一个以前搭建主备集群遇到的一个路径乱码案例
2.给大家分享如何标准化部署达梦单机环境
3.DM 达梦数据库中大写敏感介绍分享
4.达梦 DSC 集群+DW 备库部署实战:高可用架构搭建指南
数据迁移
1.分享工作中数据迁移的实用技巧与方法
2.Oracle 迁移 DM 数据库实践
3.SQLark 迁移实践分享(oracle-达梦数据库)
4.年过完了,SQLark 3.3 发版了!连接分组,断点续迁,顺滑建表,数据筛选,导出结构这些都有!)
SQL 调优
1.DM 传统行业 SQL 优化案例分享
2.DM 数据库 SQL 优化案例分享
3.如何查询 DM 数据库缓存执行计划与清理
4.使用 ob_tools 包收集分析 oceanbase 数据库 oracle 租户缓慢 sql 语句
5.使用 format_obproxy_digest_log 工具分析 obproxy 网络层耗时 SQL
6.DM 数据库回表优化案例
7.SQL 优化案例分享
8.DM SQL 关联列 like 优化案例
9.达梦数据库 SQL 关联列 like 使用 hint 方式优化案例
工具使用与日常处理
1.DataGrip 访问国产数据库_datagrip 连接国产数据库
2.如何使用 dbeaver 连接达梦数据库
3.更新大字段提示-2201 无效的对象问题
4.DM7 读写分离部署问题总结
5.DM7 读写分离集群备库数据不同步问题处理
6.达梦数据库 DISQL 工具部署及使用技巧
7.达梦数据库日常巡检方法分享
8.如何查询达梦数据库缓存执行计划与清理
9.达梦数据库运维工具分享
10.东方通中间件环境中如何部署达梦企业管理工具(DEM)
11.达梦 dmdbchk 使用秘籍:掌握 DM 数据库检查工具的功能与参数
12.ET 工具快速上手:从入门到精通的使用步骤
13.达梦数据库 SQL 日志详解:关键概念、功能及实践方法
14.搞懂达梦数据库 SQL 日志使用延伸,这些方法超实用!
15.DM 数据库守护集群入门指南:带你走进数据守护的世界
16.创建表时为何会提示“[-2670]:对象[ID]默认约束表达式无效”?
17.好奇!用 SQL 配置 DM 数据库归档,新旧版本藏着啥秘密?




