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

达梦数据库使用DBMS_LOGMNR进行日志挖掘详细步骤

原创 始于脚下 2021-03-25
2649

达梦数据库提供DBMS_LOGMNR系统包用于对归档日志进行挖掘,从而获取某一时间段内的DDL和DML等操作,用于进一步进行错误数据修正以及复杂问题深入分析。需要注意的是,DBMS_LOGMNR只支持归档日志进行分析,而且需要将RLOG_APPEND_LOGIC选项置为1或2。达梦MPP环境下不支持使用DBMS_LOGMNR包。

达梦数据库使用DBMS_LOGMNR系统包进行日志挖掘,需要以下几个步骤:

1、创建DBMS_LOGMNR系统包,如果已创建,则省略该步骤。

达梦数据库创建DBMS_LOGMNR包通过SP_CREATE_SYSTEM_PACKAGES创建,如下所示:

SQL> SP_CREATE_SYSTEM_PACKAGES(1,'DBMS_LOGMNR');

 

2、确保数据库处于归档日志模式下,通过以下方法检查数据库是否处于归档日志模式。

SQL> select para_name,para_value from v$dm_ini where para_name like 'ARCH_INI';

 

行号       PARA_NAME PARA_VALUE

---------- --------- ----------

1          ARCH_INI  1

 

已用时间: 5.985(毫秒). 执行号:23.

SQL>

结果返回1说明处于归档模式下,返回0说明处于非归档模式下。

再次强调,DBMS_LOGMNR只支持对归档日志进行分析,如果数据库处于非归档日志模式下,是没有支持的文件进行日志分析的,即使是redo日志,如下尝试对redo日志进行分析。

 

SQL> select file_id,path from v$rlogfile;

 

行号       FILE_ID     PATH

---------- ----------- ----------------------------------

1          0           C:\dmdbms\data\DAMENG\DAMENG01.log

2          1           C:\dmdbms\data\DAMENG\DAMENG02.log

 

已用时间: 2.731(毫秒). 执行号:24.

SQL> dbms_logmnr.add_logfile('C:\dmdbms\data\DAMENG\DAMENG01.log');

dbms_logmnr.add_logfile('C:\dmdbms\data\DAMENG\DAMENG01.log');

[-4546]:[DBMS_LOGMNR.ADD_LOGFILE] 打开文件失败.

已用时间: 33.677(毫秒). 执行号:0.

SQL>

SQL> dbms_logmnr.add_logfile('C:\dmdbms\data\DAMENG\DAMENG02.log');

dbms_logmnr.add_logfile('C:\dmdbms\data\DAMENG\DAMENG02.log');

[-4546]:[DBMS_LOGMNR.ADD_LOGFILE] 打开文件失败.

已用时间: 4.767(毫秒). 执行号:0.

可以明确的看到,redo日志是无法打开的,所以也就不能进一步进行日志分析了。

同时需要确认RLOG_APPEND_LOGIC选项置为1或2,如下所示。

SQL> select para_name,para_value from v$dm_ini where para_name like 'RLOG_APPEND

_LOGIC';

 

行号       PARA_NAME         PARA_VALUE

---------- ----------------- ----------

1          RLOG_APPEND_LOGIC 1

 

已用时间: 3.672(毫秒). 执行号:25.

SQL>

3、添加需要分析的归档日志文件

首先,通过以下语句查询需要进行分析的归档日志信息。

SQL> select name,first_time,next_time,first_change#,next_change# from v$archived_log where first_time > to_date('2021-03-24 19:39:00','YYYY-MM-DD HH24:MI:SS') and next_time <  to_date('2021-03-24 20:00:00','YYYY-MM-DD HH24:MI:SS');

 

行号       NAME

---------- -------------------------------------------------------------------

           FIRST_TIME

 

           ---------------------------------------------------------------------

-------------------------------

           NEXT_TIME

 

           ---------------------------------------------------------------------

-------------------------------

           FIRST_CHANGE#        NEXT_CHANGE#

           -------------------- --------------------

1          C:\dmdbms\data\arch\ARCHIVE_LOCAL1_0x7AEC8F22[0]_2021-03-24_17-39-51.log

           2021-03-24 19:39:51.000000

           2021-03-24 20:55:35.898000

           216595               217851

 

 

已用时间: 7.318(毫秒). 执行号:26.

SQL>

 

其次,根据实际需要,添加即将进行分析的归档日志文件。

SQL> dbms_logmnr.add_logfile('C:\dmdbms\data\arch\ARCHIVE_LOCAL1_0x7AEC8F22[0]_2021-03-24_17-39-51.log');

DMSQL 过程已成功完成

已用时间: 17.129(毫秒). 执行号:27.

SQL>

如果将不想进行分析的归档日志添加,可以通过remove_logfile方法将其移除,如下所示。

SQL> dbms_logmnr.remove_logfile('C:\dmdbms\data\arch\ARCHIVE_LOCAL1_0x7AEC8F22[0

]_2021-03-24_17-39-51.log');

DMSQL 过程已成功完成

已用时间: 0.934(毫秒). 执行号:28.

SQL>

 

4、开始进行归档日志分析

分析归档日志时,取分析日志的区间可以使用scn号,也可以使用时间进行区间分析。

SQL> dbms_logmnr.start_logmnr(options=>2128 , startscn=>216595 , endscn=>217851);

DMSQL 过程已成功完成

已用时间: 5.203(毫秒). 执行号:30.

SQL>

通过时间区间开始分析可以使用以下方式。

SQL> dbms_logmnr.start_logmnr(options=>2128 , starttime=>to_date('2021-03-24 19:39:00','YYYY-MM-DD HH24:MI:SS') , endtime=>('2021-03-24 20:00:00','YYYY_MM_DD HH24:MI:SS'));

此处需要注意options参数的值,options参数有4个选项,分别为:COMMITTED_DATA_ONLY、DICT_FROM_ONLINE_CATALOG、NO_SQL_DELIMITER、NO_ROWID_IN_STMT,其对应的值分别为:2、16、64、2048,作用分别为:仅从已交的事务的日志中挖掘信息、使用在线字典、拼写的SQL语句最后不添加分隔符、拼写的SQL语句中不包含ROWID。Options取值为各个选项值的组合求和,如果options指定的值不是以上4个选项值的和,会导致指定的options参数无效,而执行start_logmnr时并不会报错。

 

5、查看分析结果

查看日志分析结果,可以通过动态视图V$LOGMNR_CONTENTS进行查询,如下所示。

SQL> select operation,operation_code,scn,sql_redo,sql_undo,timestamp,seg_owner,table_name from v$logmnr_contents where seg_owner = 'SYSDBA' and operation_code in (1,2,3);

执行结果省略……

需要注意的是:sql_undo功能达梦数据库目前暂时不支持,只能查到sql_redo的内容,所以通过V$LOGMNR_CONTENTS查询的sql_undo列全部为空值。

说明:关于V$LOGMNR_CONTENTS中,操作类型 OPERATION 和 OPERATION_CODE的对应关系分别为: INTERNAL 0、INSERT 1、DELETE 2、UPDATE 3、BATCH_UPDATE 4、DDL 5、START 6、COMMIT 7、SEL_LOB_LOCATOR 9、LOB_WRITE 10、LOB_TRIM 11、SELECT_FOR_UPDATE 25、LOB_ERASE 28、MISSING_SCN 34、ROLLBACK 36、UNSUPPORTED  255、SEQ MODIFY 37

6、结束归档日志分析

SQL> dbms_logmnr.end_logmnr();

DMSQL 过程已成功完成

已用时间: 0.811(毫秒). 执行号:33.

SQL>

 

 

 

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

评论