DM8 日誌挖掘

LEVEL7發表於2021-05-14

1.     適用場景

相信許多DBA同學都碰到過這樣的情況,由於各種原因需要對資料庫進行不完全的恢復,但又不確定應該恢復到哪個時間點或者SCN。在DM中,使用者可以使用DBMS_LOGMNR包對歸檔日誌進行挖掘,重構出DDL和DML等操作,並通過獲取的資訊進行更深入的分析;同樣,可以對歸檔日誌檔案進行恢復被誤操作的資料,並進行故障跟蹤,定位執行誤操作的使用者資訊。目前DBMS_LOGMNR只支援歸檔日誌進行分析,配置歸檔後,還需要將dm.ini中的RLOG_APPEND_LOGIC選項配置為1或2。

本文實驗環境的 DM 資料庫版本為:DM Database Server 64 V8-1-2-2-21.05.07-138925-10006-ENT  Pack4

2.     配置源資料庫

1)     檢查是否開啟了歸檔和追加日誌

select

        para_name,

        para_value

from

        v$dm_ini

where

        para_name in ('ARCH_INI', 'RLOG_APPEND_LOGIC');

PARA_NAME         PARA_VALUE

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

RLOG_APPEND_LOGIC 0

ARCH_INI          0

2)     修改dm.ini引數

設定RLOG_APPEND_LOGIC=1

注:RLOG_APPEND_LOGIC 需要設定為 1 或 2,1 代表如果有主鍵列,記錄 UPDATE 和 DELETE 操作時只包含主鍵列資訊,若沒有主鍵列則包含所有列資訊;2 代表不論是否有主鍵列,記錄 UPDATE 和 DELETE 操作時都包含所有列的資訊。

alter system set 'RLOG_APPEND_LOGIC'=1 both;

3)     配置歸檔

alter database mount;

alter database add archivelog 'dest=/dmarch,type=local,file_size=256,space_limit=1024';

alter database archivelog;

alter database open;

4)     驗證結果

select

        para_name,

        para_value

from

        v$dm_ini

where

        para_name in ('ARCH_INI', 'RLOG_APPEND_LOGIC');

PARA_NAME         PARA_VALUE

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

RLOG_APPEND_LOGIC 1

ARCH_INI          1

3.     源資料庫模擬資料操作

1)     建立表空間、使用者、表

create tablespace tbs_logmnr datafile 'tbs_logmnr.dbf' size 64;

create user logmnr identified by "dameng123" default tablespace tbs_logmnr;

grant dba, resource, vti to logmnr;

create table logmnr.users as

select * from dba_users;

update logmnr.users set user_id=100 where user_id<=50331700;

commit;

truncate table logmnr.users;

2)     歸檔日誌切換

alter system switch logfile;

alter system archive log current;

alter database archivelog current;

3)     檢視歸檔

select

        sequence# seq                                          ,

        name                                                   ,

        to_char(first_time, 'yyyy-mm-dd hh24:mi:ss') first_time,

        to_char(next_time, 'yyyy-mm-dd hh24:mi:ss') next_time  ,

        first_change#                                          ,

        next_change#

from

        v$archived_log;

SEQ         NAME                                                         FIRST_TIME          NEXT_TIME           FIRST_CHANGE#        NEXT_CHANGE#       

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

1           /dmarch/ARCHIVE_LOCAL1_0x4C89FA28[0]_2021-05-13_17-31-20.log 2021-05-13 21:11:31 2021-05-13 21:11:31 27728                32461

2           /dmarch/ARCHIVE_LOCAL1_0x4C89FA28[0]_2021-05-13_21-11-33.log 2021-05-13 21:11:31 2021-05-13 21:30:29 32462                32963

3           /dmarch/ARCHIVE_LOCAL1_0x4C89FA28[0]_2021-05-13_21-30-31.log 2021-05-13 21:30:29 2021-05-13 21:42:57 32964                33432

4           /dmarch/ARCHIVE_LOCAL1_0x4C89FA28[0]_2021-05-14_10-06-25.log 2021-05-13 21:42:57 2021-05-14 10:53:13 33433                33715

5           /dmarch/ARCHIVE_LOCAL1_0x4C89FA28[0]_2021-05-14_12-01-31.log 2021-05-14 10:53:13 2021-05-14 12:23:40 33716                34196

6           /dmarch/ARCHIVE_LOCAL1_0x4C89FA28[0]_2021-05-14_12-30-49.log 2021-05-14 12:23:40 2021-05-14 12:30:49 34197                34203

4.     開始日誌挖掘

1)     查詢魔數

select db_magic from v$rlog;

DB_MAGIC           

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

1581226857

2)     下載源端歸檔日誌到本地,修改歸檔日誌魔數(依次修改2個歸檔日誌魔數)

./dmmdf TYPE=2 FILE=/dmarch_logmnr/ARCHIVE_LOCAL1_0x4C89FA28[0]_2021-05-14_12-01-31.log

./dmmdf TYPE=2 FILE=/dmarch_logmnr/ARCHIVE_LOCAL1_0x4C89FA28[0]_2021-05-14_12-30-49.log

3)     新增一個或多個需要分析的歸檔日誌檔案

DBMS_LOGMNR.ADD_LOGFILE('/dmarch_logmnr/ARCHIVE_LOCAL1_0x4C89FA28[0]_2021-05-14_12-01-31.log');

DBMS_LOGMNR.ADD_LOGFILE('/dmarch_logmnr/ARCHIVE_LOCAL1_0x4C89FA28[0]_2021-05-14_12-30-49.log');

注:對於不在資料庫預設歸檔路徑下的歸檔日誌,可以直接指定歸檔日誌的絕對路徑新增進分析列表。

4)     查詢通過 ADD_LOGFILE 新增的歸檔日誌檔案

SELECT

        LOW_SCN  ,

        NEXT_SCN ,

        LOW_TIME ,

        HIGH_TIME,

        LOG_ID   ,

        FILENAME

FROM

        V$LOGMNR_LOGS;

LOW_SCN              NEXT_SCN             LOW_TIME                   HIGH_TIME                  LOG_ID    

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

FILENAME                                                          

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

33716                34196                2021-05-14 10:53:13.510294 2021-05-14 12:23:40.627000 0

/dmarch_logmnr/ARCHIVE_LOCAL1_0x4C89FA28[0]_2021-05-14_12-01-31.log

 

34197                34361                2021-05-14 12:23:40.627000 2021-05-14 12:30:50.432000 1

/dmarch_logmnr/ARCHIVE_LOCAL1_0x4C89FA28[0]_2021-05-14_12-30-49.log

5)     啟動歸檔日誌檔案分析

DBMS_LOGMNR.START_LOGMNR(OPTIONS=>2128, STARTTIME=>TO_DATE('2021-05-14 11:30:00', 'YYYY-MM-DD HH24:MI:SS'), ENDTIME=>TO_DATE('2021-05-14 12:30:00', 'YYYY-MM-DD HH24:MI:SS'));

注:可以指定日誌檔案分析的時間段或SCN範圍,同樣可以指定Options的功能組合,如下:

Options :提供如下的可選模式,各模式可以通過+或者按位或來進行組合。其它位的值如1、4、8等目前不支援,配置後不會報錯,但是沒有效果。

Options

對應值

說明

COMMITTED_DATA_ONLY

2

僅從已交的事務的日誌中挖掘資訊

DICT_FROM_ONLINE_CATALOG

16

使用線上字典

NO_SQL_DELIMITER

64

拼寫的 SQL 語句最後不新增分隔符

NO_ROWID_IN_STMT

2048

拼寫的 SQL 語句中不包含 ROWID

6)     檢視歸檔日誌檔案的分析結果

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_CONTENTS

where

        table_name = 'xxx';

注:可以根據需要指定追蹤資訊,如表名、使用者名稱、時間段等,在資料庫中執行的操作會被解析為單行元組的SQL操作,即在資料庫中執行一條update XX set name=xx where id<100;則在日誌分析結果中會解析為一條條單行元組的SQL操作,如:update XX set name=xx where id=1;update table_name set name=xx where id=2;等所有id小於100的SQL操作。

OPERATION 欄位代表操作型別,主要包括start、insert、update、delete、commit、rollback等語句。

OPERATION_CODE 代表操作型別程式碼,1表示插入操作,2表示刪除操作,3表示更新操作,6表示事務起始語句,7表示提交操作,9表示批量更新,36表示回滾操作。

7)     終止歸檔日誌檔案分析

DBMS_LOGMNR.END_LOGMNR();

進行日誌挖掘過程中,在V$LOGMNR_LOGS、V$LOGMNR_CONTENTS等資料庫動態效能檢視上會產生分析資料,資料儲存在TEMP臨時表空間上,會話斷開或終止歸檔日誌檔案分析後,資料會被清除。

5.     注意

做日誌挖掘時候,始終用同一個會話視窗執行sql,這樣才會成功。


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

相關文章