达梦数据库归档日志挖掘

达梦数据库日志挖掘(logminer)精简版 阅读详情

一.前言

在使用达梦数据库的过程中,经常会遇到对归档日志进行处理的场景,

比如,发现归档日志生成的过快,对业务又不太熟悉的情况下,我们可以分析归档日志,统计相应语句使用的频率来初步判断是那些操作导致的。

还有,如果有人误删了数据,又无法定位到那些时间段,或者那些具体的语句,也可以通过日志分析工具来找到。

DBMS_LOGMNR是达梦数据库日志挖掘功能使用的系统包,它可以方便的对数据库归档日志进行挖掘,重构出 DDL DMLDCL 等操作,方便审计及跟踪数据库的操作,并通过获取的信息进行更深入的分析。

目前 DBMS_LOGMNR 只支持对归档日志进行分析,在使用该方法之前,需要将数据库设置为归档模式,并将RLOG_APPEND_LOGIC选项置为 1 或 2。

使用包内的过程和函数之前,如果还未创建过系统包。请先调用系统过程创建系统包。默认安装达梦数据库后该包已自动创建。

二.主要流程

1. 搭建测试库

2.拷贝归档

3. 创建新的实例

4. 修改该实例db_magic为归档源库的db_magic

5. 进行日志挖掘

6. 查看日志挖掘结果

三. V$LOGMNR_CONTENTS视图与dmmdf工具介绍

1.V$LOGMNR_CONTENTS的关键的几列:

SCN BIGINT 当前记录的 LSN

START_SCN BIGINT 当前事务的起始 LSN

COMMIT_SCN BIGINT 当前事务的截止 LSN

TIMESTAMP DATETIME 当前记录的创建时间

START_TIMESTAMP DATETIME 当前事务的起始时间

COMMIT_TIMESTAMP DATETIME 当前事务的截止时间

OPERATION VARCHAR(32) 操作类型

USERNAME VARCHAR(128) 执行这条语句的用户名

SEG_OWNER VARCHAR(128) 操作的模式名

TABLE_NAME VARCHAR(128) 操作的表名

DATA_OBJ# INTEGER 对象 ID 号

SQL_REDO VARCHAR(4000) 客户端发送给数据库的 SQL 语句。

2.dmmdf工具的使用:

达梦数据库的dmmdf 工具可以对DM相关的文件的属性进行修改。 从dmmdf的帮助可以看出,支持的修改的文件类型有:dbf、rlog、original bak、bakset meta、bakset bkp、bakset,根据文件的不同,可修改的属性也有所不同,最主要的就是修改db_magic。

四.不同用户的操作频率统计实际操作演示

1.测试库的RLOG_APPEND_LOGIC需要修改为1,就可以进行日志挖掘。(新初始化一个库,修改成源库对应的dbmagic,即可;归档也不要开,直接开挖

需要在停服务的情况下修改SYSTEM.DBF,DAMENG01.log,DAMENG02.log的dbmagic

2.首先在原数据库内获取db_magic

select db_magic;

1019736265

3.然后修改测试库的db_magic

cd /home/dmdba/dm/dmdbms/bin

./dmmdf TYPE=1 FILE=/dbdata/dmdata/DAMENG/SYSTEM.DBF

(1 1019736265 y)

./dmmdf TYPE=2 FILE=/dbdata/dmdata/DAMENG/DAMENG01.log

./dmmdf TYPE=2 FILE=/dbdata/dmdata/DAMENG/DAMENG02.log

(6 1019736265 y)

4.开始数据挖掘,开启数据库

./dmserverd start

加载归档日志

DBMS_LOGMNR.ADD_LOGFILE('/dbarch/dmarch/ARCHIVE_LOCAL1_0x166EAEC[0]_2022-04-08_14-37-11.log');

DBMS_LOGMNR.START_LOGMNR(OPTIONS=>2048 );

select * from V$LOGMNR_CONTENTS limit 0,100;

DBMS_LOGMNR.END_LOGMNR();

5.以上是一个完整的流程,下面来具体分析搜索日志,因为只是临时加载日志,所以每当关掉会话后,就需要重新加载归档日志,当加载多个日志时需要用到以下小脚本。(注意不要在生产环境上分析日志,当分析的日志多的情况下会很慢)

6.使用脚本批量生成语句

for i in `ls`;do echo DBMS_LOGMNR.ADD_LOGFILE\(\'"/dbarch/dmarch/"$i\'\)\;;done

DBMS_LOGMNR.ADD_LOGFILE('/dbarch/dmarch/ARCHIVE_LOCAL1_0x166EAEC[0]_2022-04-08_14-37-11.log');

DBMS_LOGMNR.ADD_LOGFILE('/dbarch/dmarch/ARCHIVE_LOCAL1_0x166EAEC[0]_2022-04-19_19-04-34.log');

DBMS_LOGMNR.ADD_LOGFILE('/dbarch/dmarch/ARCHIVE_LOCAL1_0x166EAEC[0]_2022-04-20_19-18-33.log');

DBMS_LOGMNR.ADD_LOGFILE('/dbarch/dmarch/ARCHIVE_LOCAL1_0x166EAEC[0]_2022-04-21_00-53-48.log');

DBMS_LOGMNR.ADD_LOGFILE('/dbarch/dmarch/ARCHIVE_LOCAL1_0x166EAEC[0]_2022-06-10_18-16-16.log');

DBMS_LOGMNR.ADD_LOGFILE('/dbarch/dmarch/ARCHIVE_LOCAL1_0x166EAEC[0]_2022-06-12_18-10-00.log');

DBMS_LOGMNR.ADD_LOGFILE('/dbarch/dmarch/ARCHIVE_LOCAL1_0x166EAEC[0]_2022-06-13_20-15-00.log');

DBMS_LOGMNR.ADD_LOGFILE('/dbarch/dmarch/ARCHIVE_LOCAL1_0x166EAEC[0]_2022-06-19_19-54-08.log');

DBMS_LOGMNR.ADD_LOGFILE('/dbarch/dmarch/ARCHIVE_LOCAL1_0x166EAEC[0]_2022-06-21_01-19-39.log');

DBMS_LOGMNR.ADD_LOGFILE('/dbarch/dmarch/ARCHIVE_LOCAL1_0x166EAEC[0]_2022-06-27_02-48-48.log');

DBMS_LOGMNR.ADD_LOGFILE('/dbarch/dmarch/ARCHIVE_LOCAL1_0x166EAEC[0]_2022-06-27_18-34-09.log');

7.开始日志分析

DBMS_LOGMNR.START_LOGMNR(OPTIONS=>2048 );

8.查询相应语句使用频率

select operation,SEG_OWNER,username,DATA_OBJ#,COUNT(operation) COUNT_DESC from V$LOGMNR_CONTENTS group by operation,SEG_OWNER,username,DATA_OBJ# ORDER BY COUNT_DESC DESC;

select * from V$LOGMNR_CONTENTS limit 0,100;

最后一列就是insert某张表的执行频率

将获取的信息取出,copy到源库中,查询对应的表名,模式名,用户名

select * from sysobjects where id in ('150994945','50331649','1077',’1093’);

或者直接查询SQL_REDO字段,也能获得很多信息。

select SQL_REDO from V$LOGMNR_CONTENTS limit 0,100;

9.结束日志分析

DBMS_LOGMNR.END_LOGMNR();

五.寻找删除操作实际操作演示

1. 先按第四章的1-3步执行

2. 在表中删除一条数据

3.切换下归档日志

 alter database archivelog current;

4.使用批量生成语句脚本(记得修改对应路径)

for i in `ls`;do echo DBMS_LOGMNR.ADD_LOGFILE\(\'"/home/dbarch/dmarch/"$i\'\)\;;done

将生成的语句执行

5.开始日志分析

DBMS_LOGMNR.START_LOGMNR(OPTIONS=>2048 );

6.利用模式名和表名找到对应的删除语句

select '

SELECT OPERATION_CODE , SCN, SQL_REDO , TIMESTAMP ,USERNAME,

SEG_OWNER, TABLE_NAME FROM V$LOGMNR_CONTENTS

 WHERE

SQL_REDO LIKE

''DELETE FROM "'||A.SCHID||'"."OBJ# '||A.ID||'"%'';' from sysobjects  a,sysobjects b where

a.schid=b.id and b.name='SYSDBA'

AND A.NAME='DMTES02';

这样查出来的语句与原始语句有所不同

例如:

原始语句:delete from  SYSDBA.dmtes02 where V1=5;

查出来的语句:DELETE FROM "150994945"."OBJ# 1350" WHERE "COL 1" = 5;

数字150994945对应的是模式名SYSDBA,

数字1350对应的是表名dmtes02,

COL 1对应的是第一列V1,

数字可以在源库的SYS.sysobjects表中找到相关信息。

7.利用语句查到相关信息,主要收集timestamp与username字段信息。

SELECT OPERATION_CODE , SCN, SQL_REDO , TIMESTAMP ,USERNAME,

SEG_OWNER, TABLE_NAME FROM V$LOGMNR_CONTENTS

 WHERE

SQL_REDO LIKE

'DELETE FROM "150994945"."OBJ# 1350"%';

8.在sysobjects表中找到用户名。

select * from sysobjects where ID in ('50331649');

9.在视图V$SESSION_HISTORY内找到用户对应的登入时间,就可以找到执行语句的ip,主机名,服务名等信息了。

select sess_id,user_name,create_time,clnt_host,appname,clnt_ip

 from V$SESSION_HISTORY where user_name='SYSDBA' and create_time <='2022-07-10 22:51:18.506000' order by create_time desc;

如果是一个长期删除的动作,也可以在V$SESSION视图内找到对应的ip,主机名,服务名等信息。

10.结束日志分析

DBMS_LOGMNR.END_LOGMNR();

六.结语

本文介绍了怎么去对达梦数据库的归档文件进行数据挖掘,具体使用的场景可以参考以上介绍的方法修改语句,如果文中哪里有误,欢迎指出,大家共同交流进步!

社区地址:https://eco.dameng.com

达梦数据库查看(解析)归档日志 达梦数据库解析归档日志达梦开启归档 阅读详情

相关推荐

达梦数据库——常见运行日志报错信息记录

达梦数据库运行日志报错信息汇总

weixin_46458436的博客 2774

DM8日志挖掘实战基于DBMS_LOGMNR解析归档原理与落地实操

跨库挖掘底层逻辑:达梦归档绑定DB_MAGIC,dmmdf修改魔数是跨实例解析的核心手段;逻辑日志开关RLOG_APPEND_LOGIC是能否解析原始SQL的关键,事前配置是运维底线;

lifetimebloved的博客 216

达梦DBMS_LOGMNR归档数据挖掘

达梦日志挖掘分析完整步骤~

Penrosee的博客 1914

达梦数据库系列—33.日志总结

用户可以调用系统过程 SP_SET_SQLLOG_INI()或SP_DELETE_SQLLOG_INI_MODE()来动态修改 sqllog.ini 文件的内容,修改后可以调用系统过程 SP_REFRESH_SVR_LOG_CONFIG()更新内存中对应的参数值,以使所做的修改生效。利用动态视图 V$DM_SQLLOG_INI 可以查询 sqllog.ini 文件中的 SQL 日志配置参数,利用动态视图 V$DM_SQLLOG_CONFIG 可以查询内存中的 SQL 日志配置参数。

md54333的博客 4533

数据文件与日志文件介绍(DM8:达梦数据库

数据库软件是一套数据管理系统的集合,数据最终会存储到操作系统的物理文件中,还有相关的日志文件;即用户通过创建表空间相关操作生成的表空间。点击跳转,查看配置步骤每个 RLOG_PKG 都有对应的序号属性,称之为包序号(PKG SEQNO),日志包生成时按照序号连续递增。包序号包括本地包序号(LSEQ)和全局包序号(GSEQ),本地包序号是节点内唯一、连续递增的值,用于校验联机日志连续性;全局包序号由数据守护集群的主备库共同维护,具有全局唯一、连续、递增的特性,用于校验归档日志的连续性。

qq_37358909的博客 5061

达梦数据库异地进行归档日志挖掘

达梦数据库异地进行归档日志i挖掘

liuyanwei1024的博客 861

达梦数据库归档日志挖掘

参考链接:

weixin_47686079的博客 229

DM8归档日志挖掘

一、配置源数据库 01 查看是否开启归档 使用如下语句查询RLOG_APPEND_LOGIC和ARCH_INI是否为1,保证数据库已开启归档模式: select para_name, para_value from v$dm_ini where para_name in ('ARCH_INI','RLOG_APPEND_LOGIC'); 02 修改dm.ini参数 设置RLOG_APPEND_LOGIC=1 alter system set 'RLOG_APPEND_LOGIC'

Robo's Blog【海阔凭鱼跃,天高任鸟飞】 628

DBMS_LOGMNR归档日志挖掘乱码DM8

达梦数据库归档日志挖掘中文乱码问题分析 环境对比 乱码环境:达梦DM8 1-2-114版本,Kylin V10系统,x86架构 正常环境:达梦DM8 1-3-162版本,相同系统和架构 问题现象 在1-2-114版本中使用DBMS_LOGMNR进行归档日志挖掘时,中文字符显示为乱码,而在1-3-162版本中显示正常。 关键配置步骤 配置数据库归档日志 设置RLOG_APPEND_LOGIC参数为1 启用DBMS_LOGMNR系统包 创建测试表并插入大量中文字符数据 解决方案 通过版本对比测试确认,该问题可能

qq_37358909的博客 701

达梦归档日志挖掘

2、参数RLOG_APPEND_LOGIC不能等于0,如果值为0,则无法查询出结果,该参数为动态参数,可以在线修改。1:如果有主键列,记录 UPDATE 和 DELETE 操作时只包含主键列信息,若没有主键列则包含所有列信息;RLOG_APPEND_LOGIC:是否启用在日志中记录逻辑操作的功能,取值范围 0、1、2、3、4。2:不论是否有主键列,记录 UPDATE 和 DELETE 操作时都包含所有列的信息;日志挖掘前,建议切换当前日志文件,防止要挖掘的信息存放在redo日志中。1、2、3、4 启用。

索大仙儿的博客 1292

达梦数据库归档日志粗挖

达梦日志挖掘

whn1977的博客 54

DM日志挖掘工具使用

数据库挖掘归档很重要,对于分析锁等待、误操作、找回数据非常有用。 下面是关于DM日志挖掘的一个测试实验。 1 创建系统包 SQL> sp_create_system_packages(1,‘DBMS_LOGMNR’); 2 检查是否开启了归档和附加日志 SQL> select para_name, para_value from v$dm_ini where para_name in (‘RLOG_APPEND_LOGIC’,‘ARCH_INI’); PARA_NAME PA

chenlinlong的博客 488

基于达梦的LOGMNR工具进行日志挖掘

DBMS_LOGMNR是达梦数据库日志挖掘功能使用的系统包,它可以方便的对数据库归档日志进行挖掘,重构出 DDL、 DML和DCL 等操作,方便审计及跟踪数据库的操作,并通过获取的信息进行更深入的分析。

qq_39634455的博客 1305

DM 达梦上的日志挖掘 DBMS_LOGMNR

注:可以根据需要指定追踪信息,如表名、用户名、时间段等,在数据库中执行的操作会 被解析为单行元组的SQL操作,即在数据库中执行一条 updateXXsetname=xxwhere id<100;同样,可以对归档日志文件进行恢复被误操作的数据,并进行故障跟踪,定位执行误操作的用户信息。OPERATION_CODE 代表操作类型代码,1 表示插入操作,2 表示删除操作,3 表示更新操作,6 表示事务起始语句,7 表示提交操作,9 表示批量更新,36 表示回滚操作。注:进行日志挖掘过程中,在 V。

weixin_45699851的博客 1281
上一篇: 达梦之路——基于Linux平台(redhat)安装部署DM8读写分离
下一篇: 达梦之路——基于Linux平台(redhat)安装部署DEM
土猫_FC
博客等级 码龄8年 2粉丝 · 15原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值