OracleLogMiner學習和使用

 logmnr可以對用戶發出的sql語句進行跟蹤,例如由於某個管理員修改數據時錯誤地把張三的工資修改了,這時使用logmnr可以知道張三的工資在修改前的值和修改後的值。通過logmnr可以把張三的工資恢復到修改前的狀態。
  安裝LogMiner:
  $oracle_home/rdbms/admin/dbmslm.sql --用來創建dbms_logmnr包,該包分析日誌文件
  $oracle_home/rdbms/admin/dbmslmd.sql --用來創建dbms_logmnr_d包,創建數據字典文件
  在運行這兩個腳本的時候要以sys用戶身份運行。
  LogMiner使用產生日誌文件的服務器來分析重做日誌文件,重做日誌文件來自當前數據庫
  LogMiner不解釋重做日誌的DDL語句,如drop table這樣的ddl語句
  LogMiner將不會重構原始的無日誌的sql操作,如果在數據字典上的DML操作結果將被記錄到日誌文件裏
  使用LogMiner分析龐大數據的重做信息,是一件非常耗費時間的事情
  無論源數據還是被分析的數據庫都必須同時使用相同的操作硬件平臺系統,都必須使用相同的字符集
  LogMiner將顯示未提交的事務,因爲重做日誌包含提交的和未提交的數據。
  LogMiner分析重做日誌文件的操作:
  1. 使用LogMiner存儲過程創建一個外部數據字典文件
  2. 然後使用另一個存儲過程創建一個被分析的重做文件的列表
  3. 最後執行另一個存儲過程來啓動LogMiner
  LogMiner重要的過程和視圖
  過程
  dbms_logmnr_d.build 創建一個數據字典文件
  dbms_logmnr.add_logfile 在列表中增加日誌文件以供分析
  dbms_logmnr.start_logmnr 使用一個個可選的字典文件和前面確定要分析的日誌文件來啓動LogMiner
  dbms_logmnr.end_logmnr 停止LogMiner分析
  視圖
  v$logmnr_dictionary 顯示用來決定對象ID名稱的字典文件的信息
  v$logmnr_logs 在LogMiner啓動時顯示被分析的日誌列表
  v$logmnr_contents LogMiner啓動後,可以使用這個視圖在sql提示符下輸入sql語句來查詢重做日誌的內容
  執行任務:
  1. 創建數據字典:
  產生確定數據字典的重要性:LogMiner將使用這個文件將對象標識轉化成一個爲意義的名字,它的信息保存到PGA內存區,應該確保系統必須有足夠的內存空間,因爲這種操作需要很大的內存,如果沒有數據字典則需要較少的PGA內存空間。
  sql> execute dbms_logmnr_d.build(dictionary_filename => 'dictionary.ora', dictionary_location => 'c:\oracle\rman\ch10');
  2. 產生數據庫操作
  比如:對一個表進行增刪查改的操作。
  這些操作語句的重做信息將被保存在當前聯機重做日誌文件中,可以從v$log視圖裏面找出日誌seq號,然後進行一個強制日誌切換,使當前聯機日誌歸檔,運行logMiner分析這個新歸檔的日誌文件(如:102.arc是新歸檔的日誌文件)。
  sql> select sequence# from v$log where status = 'CURRENT'
  sql> alter system switch logfile;
  3. 爲分析指定日誌文件
  LogMiner將分析一個指定的日誌文件,所以必須創建一個可供分析的日誌文件列表。增加的日誌文件將顯示在v$logmnr_logs視圖裏
  sql> select db_name, thread_sqn,filename from v$logmnr_logs;
  前一個任務中sql所做的改變保存在序號爲102的日誌文件裏,那麼這裏在logminer分析前添加這個日誌文件和前面的兩個文件
  begin
  dbms_logmnr.add_logfile(logfilename => '/oradata/dba/backup/ch10/100.arc', options => dbms_logmnr.NEW);
  dbms_logmnr.add_logfile(logfilename => '/oradata/dba/backup/ch10/101.arc', options => dbms_logmnr.ADDFILE);
  dbms_logmnr.add_logfile(logfilename => '/oradata/dba/backup/ch10/102.arc', options => dbms_logmnr.ADDFILE);
  end;
  /
  dbms_logmnr.new --用於建一個日誌分析表
  dbms_logmnr.addfile --用於加,入用於分析的日誌文件
  dbms_logmnr.removefile --用於移出,用於分析的日誌文件
  查看:sql> select db_name, thread_sqn,filename from v$logmnr_logs;
  可以刪除裏面的文件,如100.arc沒有包含我們想要的信息,可以用REMOVEFILE選項來刪除
  sql> execute dbms_logmnr.add_logfile(logfilename => 'd:\oradata\dba\archive\100.arc', option => dbms_logmnr.REMOVEFILE);
  4. 啓動LogMiner
  準備好字典文件和日誌文件列表後,就可以準備啓動LogMiner了
  execute dbms_logmnr.start_logmnr(dictfilename => 'c:\oracle\rman\ch10\dictionary.ora');
  可以指定分析開始的SCN和或結束的SCN,開始的時間和或結束時間。
  execute dbms_logmnr.start_logmnr(dictfilename => 'c:\oracle\rman\ch10\dictionary.ora',startime => to_date(20030501 12:12:00','yyyymmdd hh24:mi:ss'),endtime => to_date(20030501 14:20:00','yyyymmdd hh24:mi:ss'));
  5. 分析日誌文件內容
  檢查數據庫更改的細節:sql> select operation, timestamp,scn from v$logmnr_contents where seg_name = 'EMP' and seg_owner='SCOTT' and seg_type_name = 'TABLE';
  select sql_redo,sql_undo from v$logmnr_contents where seg_name='EMP' and seg_owner='SCOTT' and seg_type_name = 'TABLE';
  select usrnamen, session_info from logmnr_contents where seg_name = 'EMP' and seg_owner='SCOTT' and seg_type_name='TABLE';
  執行容量分析:使用LogMiner不會降低運行時間,而使用表審計則會導致運行時間性能開銷過大
  下面爲分析數據庫表上DML操作提供一些思路與方法:
   select operation, to_char(timestamp,'HH') hour,count(*) total from v$logmnr_contents where seg_name ='DATE_LOG' and seg_owner='TINA' and seg_type_name='TABLE' group by operation, to_char(timestamp,'HH');
  尋找DDL命令的細節:
  select seg_name,operation,scn,timestamp,count(*) from v$logmnr_contents where operation='DELETE' group by seg_name,operation,scn,timestamp order by scn;
  6. 關閉LogMiner
  可以把v$logmnr_contents視圖的內容創建一個永久的數據庫表將非常有幫助
  sql> create table logmnr_contents as select * from v$logmnr_contents;
  當完成了重做日誌的檢查,運行dbms_logmnr 中的end_logmnr
  execute dbms_logmnr.end_logmnr(); 來源:考試大-Oracle認證考試
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章