分析Oracle資料庫日誌檔案(1)
作為Oracle DBA,我們有時候需要追蹤資料誤刪除或使用者的惡意操作情況,此時我們不僅需要查出執行這些操作的資料庫賬號,還需要知道操作是由哪臺客戶端(IP地址等)發出的。針對這些問題,一個最有效實用而又低成本的方法就是分析Oracle資料庫的日誌檔案。本文將就Oracle日誌分析技術做深入探討。[@more@]一、如何分析即LogMiner解釋
從目前來看,分析Oracle日誌的唯一方法就是使用Oracle公司提供的LogMiner來進行, Oracle資料庫的所有更改都記錄在日誌中,但是原始的日誌資訊我們根本無法看懂,而LogMiner就是讓我們看懂日誌資訊的工具。從這一點上看,它和tkprof差不多,一個是用來分析日誌資訊,一個則是格式化跟蹤檔案。透過對日誌的分析我們可以實現下面的目的:
1、查明資料庫的邏輯更改;
2、偵察並更正使用者的誤操作;
3、執行事後審計;
4、執行變化分析。
不僅如此,日誌中記錄的資訊還包括:資料庫的更改歷史、更改型別(INSERT、UPDATE、DELETE、DDL等)、更改對應的SCN號、以及執行這些操作的使用者資訊等,LogMiner在分析日誌時,將重構等價的SQL語句和UNDO語句(分別記錄在V$LOGMNR_CONTENTS檢視的SQL_REDO和SQL_UNDO中)。這裡需要注意的是等價語句,而並非原始SQL語句,例如:我們最初執行的是“delete a where c1 <>'cyx';”,而LogMiner重構的是等價的6條DELETE語句。所以我們應該意識到V$LOGMNR_CONTENTS檢視中顯示的並非是原版的現實,從資料庫角度來講這是很容易理解的,它記錄的是元操作,因為同樣是“delete a where c1 <>'cyx';”語句,在不同的環境中,實際刪除的記錄數可能各不相同,因此記錄這樣的語句實際上並沒有什麼實際意義,LogMiner重構的是在實際情況下轉化成元操作的多個單條語句。
另外由於Oracle重做日誌中記錄的並非原始的物件(如表以及其中的列)名稱,而只是它們在Oracle資料庫中的內部編號(對於表來說是它們在資料庫中的物件ID,而對於表中的列來說,對應的則是該列在表中的排列序號:COL 1, COL 2 等),因此為了使LogMiner重構出的SQL語句易於識別,我們需要將這些編號轉化成相應的名稱,這就需要用到資料字典(也就說LogMiner本身是可以不用資料字典的,詳見下面的分析過程),LogMiner利用DBMS_LOGMNR_D.BUILD()過程來提取資料字典資訊。
LogMiner包含兩個PL/SQL包和幾個檢視:
1、dbms_logmnr_d包,這個包只包括一個用於提取資料字典資訊的過程,即dbms_logmnr_d.build()過程。
2、dbms_logmnr包,它有三個過程:
add_logfile(name varchar2, options number) - 用來新增/刪除用於分析的日誌檔案;
start_logmnr(start_scn number, end_scn number, start_time number,end_time number, dictfilename varchar2, options number) - 用來開啟日誌分析,同時確定分析的時間/SCN視窗以及確認是否使用提取出來的資料字典資訊。
end_logmnr() - 用來終止分析會話,它將回收LogMiner所佔用的記憶體。
與LogMiner相關的資料字典。
1、v$logmnr_dictionary,LogMiner可能使用的資料字典資訊,因logmnr可以有多個字典檔案,該檢視用於顯示這方面資訊。
2、v$logmnr_parameters,當前LogMiner所設定的引數資訊。
3、v$logmnr_logs,當前用於分析的日誌列表。
4、v$logmnr_contents,日誌分析結果。
二、Oracle9i LogMiner的增強:
1、支援更多資料/儲存型別:連結/遷移行、CLUSTER表操作、DIRECT PATH插入以及DDL操作。在V$LOGMNR_CONTENTS的SQL_REDO中可以看到DDL操作的原句(CREATE USER除外,其中的密碼將以加密的形式出現,而不是原始密碼)。如果TX_AUDITING初始化引數設為TRUE,則所有操作的資料庫賬號將被記錄。
2、提取和使用資料字典的選項:現在資料字典不僅可以提取到一個外部檔案中,還可以直接提取到重做日誌流中,它在日誌流中提供了操作當時的資料字典快照,這樣就可以實現離線分析。
3、允許對DML操作按事務進行分組:可以在START_LOGMNR()中設定COITTED_DATA_ONLY選項,實現對DML操作的分組,這樣將按SCN的順序返回已經提交的事務。
4、支援SCHEMA的變化:在資料庫開啟的狀態下,如果使用了LogMiner的DDL_DICT_TRACKING選項,Oracle9i的LogMiner將自動對比最初的日誌流和當前系統的資料字典,並返回正確的DDL語句,並且會自動偵察並標記當前資料字典和最初日誌流之間的差別,這樣即使最初日誌流中所涉及的表已經被更改或者根本已經不存在,LogMiner同樣會返回正確的DDL語句。
5、在日誌中記錄更多列資訊的能力:例如對於UPDATE操作不僅會記錄被更新行的情況,還可以捕捉更多前影資訊。
6、支援基於數值的查詢:Oracle9i LogMiner在支援原有基於後設資料(操作、物件等)查詢的基礎上,開始支援基於實際涉及到的資料的查詢。例如涉及一個工資表,現在我們可以很容易地查出員工工資由1000變成2000的原始更新語句,而在之前我們只能選出所有的更新語句。
從目前來看,分析Oracle日誌的唯一方法就是使用Oracle公司提供的LogMiner來進行, Oracle資料庫的所有更改都記錄在日誌中,但是原始的日誌資訊我們根本無法看懂,而LogMiner就是讓我們看懂日誌資訊的工具。從這一點上看,它和tkprof差不多,一個是用來分析日誌資訊,一個則是格式化跟蹤檔案。透過對日誌的分析我們可以實現下面的目的:
1、查明資料庫的邏輯更改;
2、偵察並更正使用者的誤操作;
3、執行事後審計;
4、執行變化分析。
另外由於Oracle重做日誌中記錄的並非原始的物件(如表以及其中的列)名稱,而只是它們在Oracle資料庫中的內部編號(對於表來說是它們在資料庫中的物件ID,而對於表中的列來說,對應的則是該列在表中的排列序號:COL 1, COL 2 等),因此為了使LogMiner重構出的SQL語句易於識別,我們需要將這些編號轉化成相應的名稱,這就需要用到資料字典(也就說LogMiner本身是可以不用資料字典的,詳見下面的分析過程),LogMiner利用DBMS_LOGMNR_D.BUILD()過程來提取資料字典資訊。
LogMiner包含兩個PL/SQL包和幾個檢視:
1、dbms_logmnr_d包,這個包只包括一個用於提取資料字典資訊的過程,即dbms_logmnr_d.build()過程。
2、dbms_logmnr包,它有三個過程:
add_logfile(name varchar2, options number) - 用來新增/刪除用於分析的日誌檔案;
start_logmnr(start_scn number, end_scn number, start_time number,end_time number, dictfilename varchar2, options number) - 用來開啟日誌分析,同時確定分析的時間/SCN視窗以及確認是否使用提取出來的資料字典資訊。
end_logmnr() - 用來終止分析會話,它將回收LogMiner所佔用的記憶體。
與LogMiner相關的資料字典。
1、v$logmnr_dictionary,LogMiner可能使用的資料字典資訊,因logmnr可以有多個字典檔案,該檢視用於顯示這方面資訊。
2、v$logmnr_parameters,當前LogMiner所設定的引數資訊。
3、v$logmnr_logs,當前用於分析的日誌列表。
4、v$logmnr_contents,日誌分析結果。
二、Oracle9i LogMiner的增強:
1、支援更多資料/儲存型別:連結/遷移行、CLUSTER表操作、DIRECT PATH插入以及DDL操作。在V$LOGMNR_CONTENTS的SQL_REDO中可以看到DDL操作的原句(CREATE USER除外,其中的密碼將以加密的形式出現,而不是原始密碼)。如果TX_AUDITING初始化引數設為TRUE,則所有操作的資料庫賬號將被記錄。
2、提取和使用資料字典的選項:現在資料字典不僅可以提取到一個外部檔案中,還可以直接提取到重做日誌流中,它在日誌流中提供了操作當時的資料字典快照,這樣就可以實現離線分析。
3、允許對DML操作按事務進行分組:可以在START_LOGMNR()中設定COITTED_DATA_ONLY選項,實現對DML操作的分組,這樣將按SCN的順序返回已經提交的事務。
4、支援SCHEMA的變化:在資料庫開啟的狀態下,如果使用了LogMiner的DDL_DICT_TRACKING選項,Oracle9i的LogMiner將自動對比最初的日誌流和當前系統的資料字典,並返回正確的DDL語句,並且會自動偵察並標記當前資料字典和最初日誌流之間的差別,這樣即使最初日誌流中所涉及的表已經被更改或者根本已經不存在,LogMiner同樣會返回正確的DDL語句。
5、在日誌中記錄更多列資訊的能力:例如對於UPDATE操作不僅會記錄被更新行的情況,還可以捕捉更多前影資訊。
6、支援基於數值的查詢:Oracle9i LogMiner在支援原有基於後設資料(操作、物件等)查詢的基礎上,開始支援基於實際涉及到的資料的查詢。例如涉及一個工資表,現在我們可以很容易地查出員工工資由1000變成2000的原始更新語句,而在之前我們只能選出所有的更新語句。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/66009/viewspace-799529/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 分析Oracle資料庫日誌檔案(1)(轉)Oracle資料庫
- 分析Oracle資料庫日誌檔案(1) [轉]Oracle資料庫
- 分析Oracle資料庫日誌檔案(2)Oracle資料庫
- 分析Oracle資料庫日誌檔案(3)Oracle資料庫
- 分析Oracle資料庫日誌檔案(三)EPOracle資料庫
- 分析Oracle資料庫日誌檔案(二)DOOracle資料庫
- 分析Oracle資料庫日誌檔案(一)HBOracle資料庫
- oracle資料庫歸檔日誌量陡增分析Oracle資料庫
- MySQL資料庫中的日誌檔案---(1)錯誤日誌MySql資料庫
- oracle資料庫移動資料檔案、日誌檔案和控制檔案Oracle資料庫
- 建立資料庫檔案-日誌檔案-次要資料庫檔案資料庫
- Oracle資料庫聯機日誌檔案丟失處理方法(1)Oracle資料庫
- 【LOG】Oracle資料庫清理日誌、跟蹤檔案利器Oracle資料庫
- 深入分析Oracle日誌檔案Oracle
- oracle中移動控制檔案、資料檔案、日誌檔案Oracle
- MySQL資料庫中的日誌檔案---(4)配置日誌檔案輸出路徑MySql資料庫
- 【Oracle日誌】- 日誌檔案重建Oracle
- SQL Server 無日誌檔案附加資料庫SQLServer資料庫
- oracle日誌分析從列表中移去一個日誌檔案Oracle
- MySQL資料庫中的日誌檔案---(3)慢查詢日誌MySql資料庫
- MySQL資料庫中的日誌檔案---(2)普通查詢日誌MySql資料庫
- 在Oracle中移動資料檔案、控制檔案和日誌檔案Oracle
- 【Oracle】如何修改資料檔案和日誌檔案的路徑Oracle
- Oracle資料庫重做日誌及歸檔日誌的工作原理說明Oracle資料庫
- oracle 資料庫lsnrctl監聽的日誌路徑和trace檔案Oracle資料庫
- 解決Oracle資料庫日誌檔案丟失恢復問題Oracle資料庫
- Oracle資料庫聯機日誌檔案丟失處理方法(3)Oracle資料庫
- Oracle資料庫聯機日誌檔案丟失處理方法(2)Oracle資料庫
- Oracle資料庫聯機日誌檔案丟失處理方法(4)Oracle資料庫
- Oracle資料庫聯機日誌檔案丟失處理方法(5)Oracle資料庫
- 分析資料庫日誌(LogMiner)資料庫
- 【Oracle】 Oracle11gR2 擴充套件資料庫聯機日誌檔案Oracle套件資料庫
- oracle資料庫mmnl日誌很大Oracle資料庫
- oracle 日誌檔案管理Oracle
- Oracle資料庫聯機日誌檔案丟失處理方法(總結)!Oracle資料庫
- Oracle叢集資料庫中恢復歸檔日誌Oracle資料庫
- MySQL資料庫中常見的日誌檔案彙總!MySql資料庫
- 丟失已歸檔日誌檔案下恢復資料庫資料庫