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

DBMS_LOGMNR 实战:从日志中找回丢失的数据​

380

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(idintnamevarchar(50));
begin
for i in1..5000loop
insertinto t_test(idnamevalues(i, DBMS_RANDOM.string('A'20));
commit;
endloop;
end;
/
selectcount(*) from t_test;

createtable t_test1(idintnamevarchar(50));
begin
for i in1..5000loop
insertinto t_test1(idnamevalues(i, DBMS_RANDOM.string('A'20));
commit;
endloop;
end;
/
selectcount(*) from t_test1;

createtable t_test2(idintnamevarchar(50));
begin
for i in1..5000loop
insertinto t_test2(idnamevalues(i, DBMS_RANDOM.string('A'20));
commit;
endloop;
end;
/


selectcount(*) from t_test2;

createtable t_test4(idintnamevarchar(50));
begin
for i in1..5000loop
insertinto t_test4(idnamevalues(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 数据库归档,新旧版本藏着啥秘密?

游玩攻略

1.邂逅高明,打卡小众景点
2.别瞎逛北京了!这份攻略带你玩出京城新高度


文章转载自国产数据库学堂,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论