oracle跟蹤使用者 (有空再研究一下)
是誰偷了我的資料!!!!
time: 2008年5月15日 19:09:25
author: skate
前兩天發現評論表的在指定時間以前的資料都被刪除,領導要知道是誰幹的,但使用者透過應用程式
刪除也無法查到具體的人,因為資料庫只記錄和他直接相連的應用程式的資訊,無法定位到客戶端
的資訊,但像我遇到的這樣的情況,可能性大的就是個別人透過自己的pc機運算元據庫,這時我們
就要靠oracle的logminer工具來分析日誌了,下面我就來一起體驗下logminer的威力吧,呵呵
步驟
1.資料庫的supplemental的狀態調整
2.建立資料庫級別的觸發器,用以記錄客戶的登入資訊
3.安裝logminer
4.建立logminer資料字典(如果沒有建立資料自己,而是線上分析,看見的不是原始sql,而是
被oracle格式化的sql語句)
5.新增需要分析的日誌
6.分析日誌
7.檢視結果(v$logmnr_contents)
一。
前提準備:
最好用sys使用者,否則你要授權的
要透過logminer檢視到客戶端的資訊,我們就是檢視v$database檢視,看其supplemental_log_data_min的
狀態。
v$logmnr_contents中的客戶端的資訊。都是從v$session檢視中讀出的,要讓v$session記錄客戶端的資訊
我們就要 設定 supplemental_log_data_min 為on
YES為開啟狀態,會記錄session_info,username等資訊
NO為關閉狀態,不會記錄sesion_info,username等資訊
1. 檢視 supplemental 狀態
SYS at skate> select name ,supplemental_log_data_min from v$database;
NAME SUPPLEME
--------- --------
OMOVO NO
2. 修改supplemental的狀態
SYS at skate> alter database add supplemental log data;
Database altered.
3.確認supplemental的狀態
SYS at skate> select name,supplemental_log_data_min from v$database;
NAME SUPPLEME
--------- --------
OMOVO YES
1 row selected.
需要注意的是,這個引數資訊是記錄在控制檔案的,所以10G資料庫一旦被重建了控制檔案,那麼這個引數會再次恢復到預設狀態,也就是NO的狀態。
所以重建控制檔案後,要記得修改這個引數
二. 建立資料庫級別的觸發器
若果要讓v$logmnr_contents中的session_info記錄客戶端ip,但SESSION_INFO中我們並不能直接看到IP,
不過我們還是有辦法的,因為這個SESSION_INFO裡面的內容其實是日誌從V$SESSION檢視裡提取的,我們可以
在生產資料庫中建立一個追蹤客戶端IP地址的觸發器:
create or replace trigger on_logon_trigger
after logon on database
begin
dbms_application_info.set_client_info(sys_context('userenv', 'ip_address'));
end;
/
現在,我們就可以在V$SESSION檢視的CLIENT_INFO列中看到新登入的客戶端IP地址了。那麼現在就可以在
session_info 中看客戶端的ip了
三。 安裝logminer
1.
logminer實際上是由兩個pl/sql內建包(dbms_logmnr和dbms_logmnr_d)和4個v$動態效能檢視組成的.
v$logmnr_logs
v$logmnr_contents
v$logmnr_parameters
安裝logminer首先要以sys管理員的身份執行這個pl/sql指令碼
sql> conn /as sysdba
sql> @/rdbms/admin/dbmslm.sql
sql> @/rdbms/admin/dbmslmd.sql
2. 修改引數 utl_file_dir引數
這個引數是靜態引數,修改後需要資料庫,才會起作用,如果不重啟資料庫
在建立資料字典時會報錯,下面是建立的過程
SYS at skate> alter system set utl_file_dir=/home/oracle/logminerlog scope=spfile;
alter system set utl_file_dir=/home/oracle/logminerlog scope=spfile
*
ERROR at line 1:
ORA-02095: specified initialization parameter cannot be modified
SYS at skate> alter system set utl_file_dir='/home/oracle/logminerlog' scope=spfile;
System altered.
SYS at skate> exec
dbms_logmnr_d.build(dictionary_filename=>'logminer',dictionary_location=>'/home/oracle/logminerlog');
BEGIN dbms_logmnr_d.build(dictionary_filename=>'logminer',dictionary_location=>'/home/oracle/logminerlog'); END;
*
ERROR at line 1:
ORA-01336: specified dictionary file cannot be opened
ORA-29280: invalid directory path
ORA-06512: at "SYS.DBMS_LOGMNR_INTERNAL", line 3474
ORA-06512: at "SYS.DBMS_LOGMNR_INTERNAL", line 3552
ORA-06512: at "SYS.DBMS_LOGMNR_D", line 12
ORA-06512: at line 1
SYS at skate> host mkdir /home/oracle/logminerlog
SYS at skate> exec
dbms_logmnr_d.build(dictionary_filename=>'logminer',dictionary_location=>'/home/oracle/logminerlog');
BEGIN dbms_logmnr_d.build(dictionary_filename=>'logminer',dictionary_location=>'/home/oracle/logminerlog'); END;
*
ERROR at line 1:
ORA-01336: specified dictionary file cannot be opened
ORA-29280: invalid directory path
ORA-06512: at "SYS.DBMS_LOGMNR_INTERNAL", line 3474
ORA-06512: at "SYS.DBMS_LOGMNR_INTERNAL", line 3552
ORA-06512: at "SYS.DBMS_LOGMNR_D", line 12
ORA-06512: at line 1
雖然我修改了utl_file_dir,但還沒起作用,所用要重啟資料庫
重啟資料庫
SYS at skate> shutdown immediate
SYS at skate> startup
ORACLE instance started.
Total System Global Area 440401920 bytes
Fixed Size 1262260 bytes
Variable Size 306187596 bytes
Database Buffers 130023424 bytes
Redo Buffers 2928640 bytes
Database mounted.
Database opened.
確認utl_file_dir引數值
SYS at omovo> show parameter utl_file_dir
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
utl_file_dir string /home/oracle/logminerlog
四.建立資料字典
SYS at skate> exec dbms_logmnr_d.build(dictionary_filename =>'dictionary.ora',dictionary_location => '/home/oracle/logminerlog');
dictionary_filename資料庫字典的名字隨便起
4.新增分析日誌
SYS at skate> exec dbms_logmnr.add_logfile(logfilename=>'/oracle_data/omovo/redo03.log',options=>dbms_logmnr.new);
SYS at skate> exec dbms_logmnr.add_logfile(logfilename=>'/oracle_data/omovo/redo01.log',options=>dbms_logmnr.andfile);
為了減少檢視的資料量,加快分析的時間,可以把分析過的日誌從檢視中刪除
SYS at skate> exec
dbms_logmnr.add_logfile(logfilename=>'/oracle_data/omovo/redo03.log',options=>dbms_logmnr.removefile);
SYS
at skate> exec
dbms_logmnr.add_logfile(logfilename=>'/oracle_data/omovo
/redo01.log',options=>dbms_logmnr.removefile);
四、分析
exec dbms_logmnr.start_logmnr(dictfilename=>'C:/oracle/logs/dictionary.ora'); -----如果不用字典就不能看見原始sql,只能看見被oracle處理過的sql語句
exec dbms_logmnr.start_logmnr -----只能看見被oracle處理過的sql語句,無法辨別他處理的具體內容
例子:
select
timestamp,commit_timestamp,table_space,session#,serial#,username,session_info,sql_redo,operation,table_name,seg_name,seg_owner
from v$logmnr_contents
where seg_owner=upper('movo_new')
and operation=upper('insert')
select session_info,sql_redo from v$logmnr_contents where upper(operation) = 'UPDATE' and upper(sql_redo) like '%M_%'
select to_char(timestamp,'YYYY-MM-DD HH24:MI:SS') time,sql_redo from v$logmnr_contents where seg_owner='XYGDATA' and seg_name='T_ST_WEIGH' and upper(operation)='UPDATE';
六、結束分析
SQL> execute dbms_logmnr.end_logmnr;
--待續
七. 如何分析rman備份集中的日誌
--- end ----
source:http://blog.csdn.net/wyzxg/article/details/2449409
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27036311/viewspace-1575756/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 跟蹤全部使用者Oracle
- oracle 跟蹤其他使用者Oracle
- oracle 跟蹤當前使用者會話Oracle會話
- ORACLE 跟蹤工具Oracle
- [zt] oracle跟蹤檔案與跟蹤事件Oracle事件
- oracle跟蹤檔案與跟蹤事件(zt)Oracle事件
- oracle跟蹤檔案和跟蹤事件(zt)Oracle事件
- 【TRACE】Oracle跟蹤事件Oracle事件
- Oracle跟蹤會話Oracle會話
- Oracle 跟蹤事件【轉】Oracle事件
- Oracle跟蹤檔案Oracle
- 跟蹤使用者的SQLSQL
- oracle 使用者跟蹤 需要的sql語句總結OracleSQL
- oracle session(會話) 跟蹤OracleSession會話
- Oracle跟蹤事件 -- set eventsOracle事件
- Oracle 10G 跟蹤Oracle 10g
- Oracle 跟蹤事件 set eventOracle事件
- Oracle跟蹤事件和dumpOracle事件
- oracle跟蹤事件(轉載)Oracle事件
- 啟用使用者程式跟蹤
- ASM 磁碟頭資訊備份與恢復--有空研究一下ASM
- ORACLE 10046 設定跟蹤事件後無跟蹤檔案Oracle事件
- Oracle資料庫跟蹤SQLOracle資料庫SQL
- 用oracle trace 來跟蹤sessionOracleSession
- oracle跟蹤事件(dump)總結Oracle事件
- alter session set events /Oracle跟蹤SessionOracle
- [zt]Oracle跟蹤事件 - set eventsOracle事件
- Oracle跟蹤事件:set events 整理Oracle事件
- 跟蹤oracle特定報錯 errorstackOracleError
- tkprof: 分析ORACLE跟蹤檔案Oracle
- oracle跟蹤常用內部事件號Oracle事件
- 使用 Tkprof 分析 ORACLE 跟蹤檔案Oracle
- Oracle 10046跟蹤的使用Oracle
- oracle 跟蹤檔案理論整理Oracle
- Oracle跟蹤檔案trace檔案Oracle
- 用oracle trace 來跟蹤session 活動OracleSession
- oracle 10g 程式跟蹤命令Oracle 10g
- 使用dtrace跟蹤oracle函式呼叫Oracle函式