达梦数据库提供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>




