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

Google 自訂搜尋

Goole 廣告

隨機相片
F09_737.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

對這文章發表回應

發表限制: 非會員 可以發表

發表者: 冷日 發表時間: 2016/2/1 4:44:58

關於 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日誌
內容圖示
url email imgsrc image code quote
樣本
bold italic underline linethrough   












 [詳情...]
validation picture

注意事項:
預覽不需輸入認證碼,僅真正發送文章時才會檢查驗證碼。
認證碼有效期10分鐘,若輸入資料超過10分鐘,請您備份內容後,重新整理本頁並貼回您的內容,再輸入驗證碼送出。

選項

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