DM7上的日誌挖掘
一、適用場景
相信許多DBA同學都碰到過這樣的情況,由於各種原因需要對資料庫進行不完全的恢復,但又不確定應該恢復到哪個時間點或者SCN。在DM7中,用戶可以使用DBMS_LOGMNR包對歸檔日誌進行挖掘,重構出DDL和DML等操作,並通過獲取的信息進行更深入的分析;同樣,可以對歸檔日誌文件進行恢復被誤操作的數據,並進行故障跟蹤,定位執行誤操作的用戶信息。目前DBMS_LOGMNR只支持歸檔日誌進行分析,配置歸檔後,還需要將dm.ini中的RLOG_APPEND_LOGIC選項配置為1或2。
註:需要在產生歸檔日誌的資料庫上進行分析,利用備份文件還原的測試庫上無法進行日誌挖掘,因為當資料庫經過備份還原並恢復後,DB_MAGIC就會發生改變,在還原庫上進行日誌分析時會報「[DBMS_LOGMNR.START_LOGMNR] 歸檔日誌MAGIC錯誤」錯誤。
二、環境檢查
註:本文實驗環境的DM7資料庫版本為:
DM Database Server x64 V7.1.6.33-Build(2017.12.11-87269)ENT
1、檢查是否創建了系統包
如未創建,可以執行如下命令:
SP_CREATE_SYSTEM_PACKAGES(1);
2、檢查是否開啟了歸檔和追加日誌
select para_name,para_value from v$dm_ini where para_namein ("ARCH_INI","RLOG_APPEND_LOGIC");
註:RLOG_APPEND_LOGIC需要設置為1或2,1代表如果有主鍵列,記錄UPDATE和DELETE操作時只包含主鍵列信息,若沒有主鍵列則包含所有列信息;2代表不論是否有主鍵列,記錄UPDATE和DELETE操作時都包含所有列的信息。
如果未開啟歸檔和追加日誌,可以參照如下進行設置:
-1-修改dm.ini中的參數
ARCH_INI =1
RLOG_APPEND_LOGIC=1
註:靜態參數,需要重啟資料庫後生效
-2-dmarch.ini 配置本地歸檔
[ARCHIVE_LOCAL1]
ARCH_TYPE=LOCAL
ARCH_DEST =d:dm7dataarch
ARCH_FILE_SIZE =128
ARCH_SPACE_LIMIT =0
註:歸檔文件配置完畢後,需要重啟資料庫後生效
三、開始日誌挖掘
3.1、添加歸檔日誌文件
3.1.1、查詢資料庫當前有哪些歸檔日誌
SELECT NAME ,FIRST_TIME , NEXT_TIME , FIRST_CHANGE# , NEXT_CHANGE# FROMV$ARCHIVED_LOG;
3.1.2、添加一個或多個需要分析的歸檔日誌文件
DBMS_LOGMNR.ADD_LOGFILE("/dmdb/xxx/xxx/xxx/ARCHIVE_LOCAL1_20171214120114980.log");
註:對於不在資料庫默認歸檔路徑下的歸檔日誌,可以直接指定歸檔日誌的絕對路徑添 加進分析列表。
3.1.3、查詢通過ADD_LOGFILE添加的歸檔日誌文件
可以查詢V$LOGMNR_LOGS動態視圖進行插入,如下:
SELECT LOW_SCN,NEXT_SCN, LOW_TIME, HIGH_TIME, LOG_ID, FILENAME FROMV$LOGMNR_LOGS;
3.2、啟動歸檔日誌文件分析
DBMS_LOGMNR.START_LOGMNR(OPTIONS=>2128, STARTTIME=>TO_DATE("2018‐1‐2412:01:12","YYYY‐MM‐DD HH24:MI:SS") , ENDTIME=>TO_DATE("2018‐01‐2404:20:03","YYYY‐MM‐DDHH24:MI:SS"));
註:可以指定日誌文件分析的時間段或SCN範圍,同樣可以指定Options的功能組合,如 下:
Options:提供如下的可選模式,各模式可以通過 + 或者按位或來進行組合。其它位的值如1、4、8等目前不支持,配置後不會報錯,但是沒有效果。
3.2.1、查看歸檔日誌文件的分析結果
如要查看歸檔日誌文件的分析結果,可以通過動態視圖V$LOGMNR_CONTENTS進行 查詢,如下:
select TIMESTAMP ,START_TIMESTAMP ,COMMIT_TIMESTAMP ,OPERATION ,OPERATION_CODE ,ROLL_BACK ,TABLE_NAME ,ROW_ID ,USERNAME ,DATA_OBJ# , DATA_OBJV# , SQL_REDO, REDO_VALUE, UNDO_VALUE
from V$LOGMNR_CONTENTSwheretable_name= "XXX";
註:可以根據需要指定追蹤信息,如表名、用戶名、時間段等,在資料庫中執行的操作會 被解析為單行元組的SQL操作,即在資料庫中執行一條updateXXsetname=xxwhere id
name=xxwhereid=1;updatetable_namesetname=xxwhereid=2;等所有id小於100的SQL操作。
OPERATION欄位代表操作類型,主要包括start、insert、update、delete、commit、 rollback等語句
OPERATION_CODE代表操作類型代碼,1表示插入操作, 2表示刪除操作,3表示更新操 作,6表示事務起始語句,7表示提交操作,9表示批量更新,36表示回滾操作。
3.3、終止歸檔日誌文件分析
DBMS_LOGMNR.END_LOGMNR();
註:進行日誌挖掘過程中,在V$LOGMNR_LOGS、V$LOGMNR_CONTENTS等資料庫動態性能視圖上會產生分析數據,數據存儲在TEMP臨時表空間上,會話斷開或終止歸檔日誌文件分析後,數據會被清除。
看到這裡,相信大家對DBMS_LOGMNR的基本用法有了一定的了解,如果大家想對日誌挖掘進行進一步的學習,可以查看《DM7系統包使用手冊》的第七章 DBMS_LOGMNR包。


TAG:武漢達夢資料庫 |