用logmnr追蹤oracle操作記錄

1 確保打開補充日誌

alter database add supplemental log data;

SQL> select SUPPLEMENTAL_LOG_DATA_MIN from v$database;

 

SUPPLEME

--------

YES

2 確保已配置utl_file_dir

SQL> show parameter utl_file_dir;

 

NAME                                 TYPE        VALUE

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

utl_file_dir                         string

如果value值爲空,說明沒設置該值,需要設置下,示例:

alter system set UTL_FILE_DIR='d:\logmnr' scope=spfile;

重啓數據庫,使修改生效:

SQL> shutdown immediate;

數據庫已經關閉。

已經卸載數據庫。

ORACLE 例程已經關閉。

SQL> startup;

ORACLE 例程已經啓動。

 

Total System Global Area 1286066176 bytes

Fixed Size                  2175408 bytes

Variable Size             939527760 bytes

Database Buffers          335544320 bytes

Redo Buffers                8818688 bytes

數據庫裝載完畢。

數據庫已經打開。

SQL> show parameter utl_file_dir;

 

NAME                                 TYPE        VALUE

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

utl_file_dir                         string      d:\logmnr

3 製造測試數據(可選)

用jiao這個用戶執行一條sql:

update scott.emp set comm=8888 where empno=7900;

4 追蹤操作記錄

4.1 建立數據字典分析文件

SQL> exec dbms_logmnr_d.build('dict.ora','d:\logmnr',dbms_logmnr_d.store_in_flat_file);

 

PL/SQL 過程已成功完成。

4.2 添加日誌分析(要追蹤的sql所在日誌)

exec dbms_logmnr.add_logfile(logfilename=>'D:\APP\65128\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2020_04_22\O1_MF_1_95_H9ZDZ5RT_.ARC',options=>dbms_logmnr.new);

4.3 執行分析

exec dbms_logmnr.start_logmnr(dictfilename=>'d:\logmnr\dict.ora',options=>dbms_logmnr.ddl_dict_tracking);

 

--這裏也可以限制時間範圍,如:

execute dbms_logmnr.start_logmnr(startTime => to_date('2020-04-22 11:00:18','yyyy-mm-dd hh24:mi:ss'),endTime => to_date('2020-04-22 11:10:06','yyyy-mm-dd hh24:mi:ss'),DictFileName => 'd:\logmnr\dict.ora',options=>dbms_logmnr.ddl_dict_tracking);

4.4 查看分析結果

查看關於EMP表的update操作記錄:

select username,seg_owner,scn,to_char(timestamp, 'YYYY-MM-DD HH:MI:SS'),sql_redo from v$logmnr_contents where lower(sql_redo) like '%update%' and table_name='EMP';

 

可以看到是JIAO這個用戶執行了一個update操作,sql_redo裏可以看到具體的操作。注意,where條件和執行時的where條件有些出入。

4.5 結束分析

execute dbms_logmnr.end_logmnr;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章