茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1729934 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
IMG_60D_00033.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

DB研討會 : [轉貼]Oracle 11g 啟用 Archive Log Mode

發表者 討論內容
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15773
[轉貼]關於 Archive Log

關於 Archive Log

    Oracle 有一個機制,會將執行過的 sql statement 保留下來,以備之後資料庫若有毀損,可以拿來復原,這個機制包括 Redo Log 及 Archive Log。Redo Log 並非我們一般所常提到的 Rollback Segment,Rollback Segment裡所存放的是尚未Commit 的資料,Redo Log 存的則是所有執行過的 SQL Statement。

    Redo Log 的內容大都以 DML 為主,也就是 Insert、Update、Delete,其中 Delete所佔的空間最大,Update次之,Insert 最小。

    Redo Log又稱為 OnLine Redo Log,這是因為 Oracle 會即時的將需要 Log 下來的資料寫到這裡面來,等寫滿了,再將 Redo Log轉出去寫成 Archive Log,而這個Redo Log就會被當作是空的,可以繼續拿來用。所以Redo Log的檔名會是固定的、循環的使用。而Archive Log則會一直的新增檔案。以底下而言,DB會寫 Redo Entry 到Redo Log 1 ,等寫滿後,將資料寫出成 Archive Log 4,然後DB 寫資料到Redo Log 2,寫滿後,將資料寫出成 Archive Log 5,然後DB 又開始寫資料到Redo Log 1,寫滿後,將資料寫出成 Archive Log 6,一直循環下去。

 

 


    Redo Log 和 Archive Log都是Oracle用特殊的格式寫進去的,我們必須利用一些工具才能看到其內容,Oracle有提供一個 Package SYS.DBMS_LOGMNR ,這個 Package 可以幫助我們分析 Log File的內容,執行過後,它會將資料寫進 v$logmnr_contents,我們可以直接看這個 View 的內容,不過有兩件事需要注意
    1. 這個 Package 是屬於 SYS 的,所以要執行這個 Package 的話,需要確認有此權限
    2. Select 這個 View 的指令必須和執行這個 Package在同一個 Session 裡。否則 Oracle會不允許 Query此View。

    底下是用 SYS 帳號在 Local DB上透過 sqlplus 執行的,用到的指令稍作解釋如下

    SYS.DBMS_LOGMNR.ADD_LOGFILE:
    指定要分析的 Log File,第一個加進來的 Log File請指定 Option 為SYS.DBMS_LOGMNR.NEW,之後的請用SYS.DBMS_LOGMNR.ADDFILE。

    SYS.DBMS_LOGMNR.START_LOGMNR
    開始對指定的 Log File作分析,附加的兩個 Options意義分別是以目前 Database中的 Dictionary來解析,以及只解析已Commit的資料。

    SYS.DBMS_LOGMNR.END_LOGMNR
    結束 Log Miner 的 Session。

 


    在 START_LOGMNR 和 END_LOGMNR之間,你可以對 v$logmnr_contents作 Query,一般可以先分析出哪個 Table(SEG_NAME)的交易量較大,在針對該 Table取得其 Detail 的 SQL Statement。
P.S 這裡組回的 SQL Statement並非當時下的 SQL Statement,比如說之前執行的是 Delete FROM XXXX; 共 30 筆資料,這裡會看到的就是 30 筆 Delete FROM XXXX WHERE ….而不只是一筆 DELETE FROM XXXX;


 

-- Add the log file you want to analysis, the following is online redo log file

-- You can analysis archived log file too. 

  


execute SYS . DBMS_LOGMNR . ADD_LOGFILE ( 'D:\oracle\product\10.2.0\oradata\rd2\Redo01'
, SYS . DBMS_LOGMNR .NEW);

 

execute SYS
. DBMS_LOGMNR . ADD_LOGFILE ( 'D:\oracle\oradata\synergy\Redo02.log' , SYS .
DBMS_LOGMNR . ADDFILE );

 

execute SYS .
DBMS_LOGMNR . ADD_LOGFILE ( 'D:\oracle\oradata\synergy\Redo03.log' , SYS . DBMS_LOGMNR
. ADDFILE );

 

-- Start Log Miner, the option means get data dictionary from online db and miner commited data only

 


execute SYS . DBMS_LOGMNR . START_LOGMNR ( OPTIONS =>
SYS . DBMS_LOGMNR . DICT_FROM_ONLINE_CATALOG + SYS . DBMS_LOGMNR
. COMMITTED_DATA_ONLY );

 

-- Get log from v$logmnr_contents, take a look what table is in here

 


SELECT CAST ( SEG_NAME AS VARCHAR2 ( 30
)) OBJECT_NAME , count (*)

  FROM v$logmnr_contents
group by seg_name ;

 

-- Get Detail sql statement from log table


SELECT CAST ( SEG_NAME AS VARCHAR2 ( 30
)) OBJECT_NAME ,

      SEG_TYPE OBJECT_TYPE ,

   
  TO_CHAR
( TIMESTAMP , 'YYYY-MM-DD HH24:MI:SS' ) TXN_DATE ,

      SQL_REDO REDO_ SQL ,

       SQL_UNDO UNDO_ SQL

  FROM v$logmnr_contents

  WHERE SEG_NAME =
'H_RMS_TRAN' ;

 

-- Close logminer


execute SYS . DBMS_LOGMNR
. END_LOGMNR ();


原文出處:Log Miner @ My Life, My Style :: 隨意窩 Xuite日誌
前一個主題 | 下一個主題 | | | |

討論串




Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|