oracle 10g logminer

lwitpub發表於2010-03-29

LogMiner提供了一個處理重做日誌檔案並將其內容翻譯成代表對資料庫的邏輯操作的SQL語句的過程。LogMiner執行在Oracle版本8.1或者更高版本中。

以session為操作單位
1. 設定logminer使用的目錄,此目錄需要先手工建立。
資料字典檔案是一個文字檔案,使用包DBMS_LOGMNR_D來建立,如果我們要分析的資料庫中的表有變化(比如表結構有變化等),影響到庫的資料字典也發生變化。另外一種情況是在分析另外一個資料庫檔案的重做日誌時,也必須要重新生成一遍被分析資料庫的資料字典檔案。首先需要修改引數UTL_FILE_DIR ,該引數值為伺服器中放置資料字典檔案的目錄,10g中我們透過動態修改引數的方式來修改,然後重新啟動資料庫生效。其中logs_utl_file目錄先期建立好。
conn / as sysdba 
alter system set utl_file_dir='/u02/arch/hkeudm' scope=spfile; 
shutdown immediate 
startup

2. 生成 logminer package
先要安裝logminer的兩個包;以SYS使用者執行下面兩個指令碼,其中第一個指令碼dbmslm.sql用來建立DBMS_LOGMNR包,該包用來分析日誌檔案。第二個指令碼dbmslmd.sql用來建立DBMS_LOGMNR_D包,該包用來建立資料字典檔案。

conn / as sysdba

@?/rdbms/admin/dbmslm.sql

@?/rdbms/admin/dbmslmd.sql

3. 生成 logminer file,建立資料字典檔案

execute dbms_logmnr_d.build('logminer.ora','/u02/arch/hkeudm');

4. 將要分析的日誌檔案(線上和歸檔)加入要分析的log list中,建立列表和新增其他日誌檔案到列表
execute dbms_logmnr.add_logfile('/u02/oradata/hkeudm/redo04.log',dbms_logmnr.new);
execute dbms_logmnr.add_logfile('/u02/oradata/hkeudm/redo05.log',dbms_logmnr.addfile);
execute dbms_logmnr.add_logfile('/u02/oradata/hkeudm/redo06.log',dbms_logmnr.addfile);
 如果你覺得不需要分析已經在列表中的線上或歸檔日誌,可以透過removefile命令刪除:
execute dbms_logmnr.remove_logfile('/u02/oradata/hkeudm/redo06.log');
 
5. 查詢分析的日誌檔案包含的scn範圍和日期範圍。

set lines 220

column low_scn format 9999999999

column next_scn format 9999999999

column filename format a50

select log_id,low_time,high_time,low_scn,next_scn,FILENAME from v$logmnr_logs;

相關的引數如下:
引數      引數型別  預設值 含義
StartScn 數字型    0   分析重作日誌中SCN≥StartScn日誌檔案部分
EndScn  數字型    0   分析重作日誌中SCN≤EndScn日誌檔案部分
StartTime 日期型  1998-01-01  分析重作日誌中時間戳≥StartTime的日誌檔案部分
EndTime 日期型   2988-01-01  分析重作日誌中時間戳≤EndTime的日誌檔案部分
DictFileName 字元型 字典檔案該檔案包含一個資料庫目錄的快照。
6. 執行分析:

alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

execute dbms_logmnr.start_logmnr (dictfilename=> '/u02/arch/hkeudm/logminer.ora', startscn=> 11244354, endscn=> 11294833, starttime => to_date('2008-04-10 10:28:02','yyyy-mm-dd hh24:mi:ss'), endtime => to_date('2008-04-10 13:28:02','yyyy-mm-dd hh24:mi:ss') );

到現在為止,我們已經分析得到了重作日誌檔案中的內容。動態效能檢視v$logmnr_contents包含LogMiner分析得到的所有的資訊。SELECT sql_redo FROM v$logmnr_contents;
如果我們僅僅想知道某個使用者對於某張表的操作,可以透過下面的SQL查詢得到,該查詢可以得到使用者TONY對錶R_WIP_TST所作的一切工作。
SQL>; SELECT sql_redo FROM v$logmnr_contents WHERE username='TONY' AND tablename='R_WIP_TST'; 
需要強調一點的是,檢視v$logmnr_contents中的分析結果僅在我們執行過程'dbms_logmrn.start_logmnr' 這個會話的生命期中存在(如果執行了DBMS_LOGMNR.END_LOGMNR分析結果將消失)。這是因為所有的LogMiner儲存都在PGA記憶體中,所有其他的程式是看不到它的,同時隨著程式的結束,分析結果也隨之消失。

 7. 檢視redo sql
Select SCN,timestamp, session# session_num,sql_redo From V$LOGMNR_CONTENTS where username='HKEU_DATA' -- Order by 1
8.使用DBMS_LOGMNR.END_LOGMNR結束日誌分析過程,釋放記憶體。
最後,使用過程DBMS_LOGMNR.END_LOGMNR終止日誌分析事務,此時PGA記憶體區域被清除,分析結果也隨之不再存在。
SQL> execute dbms_logmnr.end_logmnr;

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

相關文章