<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 42,comments - 83,trackbacks - 0
            有些時候(比如用戶無刪除某些數據,但又沒有備份),我們可能需要分析redo log中的transaction情況,比如提交時間、事務內容等,這樣我們可以通過LogMiner的結果,來重新提交這些事務,以保證數據不會丟失。下面是如何通過LogMiner查看redo中事務日志的具體步驟,

    1:以sysdba連接上db instance,
    SQL> connect system/coffee@testdb as sysdba
    Connected.

    2:生成數據字典信息(這一步對于source database 和mining database為同一database的情況時不需要的,我們可以使用online catalog字典,字典信息在start logMiner的時候指定),注意,要執行下面的sql, 我們首先需要把db的utl_file_dir修改為D:\oracle\admin\TestDB\utl_file_dir,如何修改這個參數,可以參考 http://www.tkk7.com/fjin/archive/2009/06/08/280666.html
    SQL> exec dbms_logmnr_d.build('dictionary.ora','D:\oracle\admin\TestDB\utl_file_dir', options =>dbms_logmnr_d.store_in_flat_file);
    這個過程因為要生成10M/27M(9i/10.2)的字典文件,執行時間可能需要2-3分鐘。
    字典信息用于將redo log中的對象標識(id)翻譯成用戶可讀的信息。如果沒有字典信息,insert into test values('fjin')將被翻譯成如下信息:

    insert into "UNKNOWN"."OBJ# 30347"("COL 1") values (HEXTORAW('666a696e'));
    根據字典信息解釋出來的sql為:
    insert into "SYSTEM"."TEST"("ADDR") values ('fjin');


    3:添加需要分析的日志文件(可以是inactive的,也可以使active的),如果需要使用當前active的,我們可以通過下面的sql查看當前的redo log,

    SQL> col status format A10
    SQL> col member format A40
    SQL> select log.status, logfile.member
      2  from v$log log, v$logfile logfile
      3  where log.group#=logfile.group#;

    STATUS     MEMBER
    ---------- ----------------------------------------
    CURRENT    D:\ORACLE\ORADATA\TESTDB\REDO01.LOG
    INACTIVE   D:\ORACLE\ORADATA\TESTDB\REDO02.LOG
    INACTIVE   D:\ORACLE\ORADATA\TESTDB\REDO03.LOG


    好了,我們看到當前的日志文件是REDO01.LOG,把它加入到logMiner中來
    SQL> exec dbms_logmnr.add_logfile( logfilename => 'D:\oracle\oradata\TestDB\redo01.log', options => dbms_logmnr.new);

    4:啟動logMiner,
    SQL> exec dbms_logmnr.start_logmnr( options => dbms_logmnr.dict_from_online_catalog);

    5:根據指定的條件分析日志,
    SQL> col sql_redo format a30
    SQL> col xid format A10
    SQL> col usr format A10
    SQL> SELECT USERNAME AS usr,(XIDUSN || '.' || XIDSLT || '.' || XIDSQN) as XID, SQL_REDO FROM V$LOGMNR_CONTENTS WHERE username='SYSTEM';
    我們可以通過sqlplus插入一條記錄,如下:

    SQL> insert into test values('fjin');
    1 row created.
    SQL> commit;
    Commit complete.

    插入這條記錄后,我們可以在通過logMiner發現和該紀錄相關的transaction信息如下:

    SYSTEM     5.26.26758 set transaction read write;
    SYSTEM     5.26.26758 insert into "SYSTEM"."TEST"("ADDR") values ('fjin');
    SYSTEM     5.26.26758 commit;


    6:結束logMiner,
    SQL>EXEC DBMS_LOGMNR.END_LOGMNR();

        這里只是給出了個大概步驟,具體的參數(5中的query condition),需要我們詳細參考oracle的Oracle Database Utilities,以便根迅捷的定位出具體我們需要的信息。

    注意:對于Oracle 10g,默認情況下LogMiner是不可用的,原文如下:
    "By default, Oracle Database does not provide any supplemental logging, which means that by default LogMiner is not usable. Therefore, you must enable at least minimal supplemental logging prior to generating log files which will be analyzed by LogMiner."
    所以,要在10g上使用LogMiner,我們必須修改如下的參數,
    SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA 
    參數修改后的redo log才會紀錄LogMiner需要的信息。參考note110301.1


    posted on 2009-06-09 13:39 走走停停又三年 閱讀(2053) 評論(0)  編輯  收藏 所屬分類: Database
    主站蜘蛛池模板: 亚洲精华液一二三产区| 亚洲国产综合在线| 免费的黄色的网站| 在线观看人成网站深夜免费| 亚洲一卡一卡二新区无人区| 男女超爽刺激视频免费播放| 亚洲春色另类小说| 日韩毛片免费无码无毒视频观看| 中文字幕 亚洲 有码 在线| 美丽的姑娘免费观看在线播放 | 亚洲熟妇无码一区二区三区| 最近高清国语中文在线观看免费| 亚洲欧洲av综合色无码| 国产色爽女小说免费看| 国产精品免费在线播放| 亚洲av综合avav中文| 182tv免费观看在线视频 | 亚洲AV无码国产精品永久一区| 日韩人妻无码免费视频一区二区三区| 亚洲色大情网站www| 免费国产高清视频| 久久99精品免费一区二区| 亚洲AV无码成人网站久久精品大| 1000部禁片黄的免费看| 亚洲欧洲精品成人久久曰| 国产精品亚洲产品一区二区三区| 老司机69精品成免费视频| 亚洲天堂福利视频| 国产91在线免费| 精品国产一区二区三区免费| 亚洲一区二区三区四区视频| 国产真实伦在线视频免费观看| 精品人妻系列无码人妻免费视频| 91精品国产亚洲爽啪在线观看| 免费观看男人免费桶女人视频| 国产精品免费久久久久电影网| 亚洲欧洲精品视频在线观看| 免费大香伊蕉在人线国产 | 亚洲AV综合色区无码一区爱AV| 91在线视频免费91| 亚洲精品黄色视频在线观看免费资源 |