達夢資料庫使用DBMS_LOGMNR進行日誌挖掘詳細步驟

始於腳下發表於2021-03-25

達夢資料庫提供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>


 

 

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31403259/viewspace-2764932/,如需轉載,請註明出處,否則將追究法律責任。

相關文章