Decode360's Blog

          業(yè)精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
            397 隨筆 :: 33 文章 :: 29 評(píng)論 :: 0 Trackbacks
          LogMiner的應(yīng)用實(shí)例
          ?
          ??? 從安裝開(kāi)始,了解一遍L(zhǎng)ogMiner的實(shí)際使用方法。有了這個(gè),基本上LogMiner就沒(méi)什么難度了,照著一模一樣做一遍就學(xué)會(huì)了,呵呵。
          ?
          一、安裝LogMiner
          ?
          ??? 1、創(chuàng)建DBMS_LOGMNR包
          ??????? @D:\oracle\ora92\rdbms\admin\dbmslm.sql;
          ?
          ??????? --指定日志文件名
          ??????? --指定篩選標(biāo)準(zhǔn)
          ??????? --確定LodMiner會(huì)話特性
          ?
          ??? 2、創(chuàng)建DBMS_LOGMNR_D包
          ??????? @D:\oracle\ora92\rdbms\admin\dbmslmd.sql;
          ?
          ??????? --該包用來(lái)創(chuàng)建數(shù)據(jù)字典文件
          ??????? --查詢當(dāng)前數(shù)據(jù)庫(kù)的字典表
          ?
          ?
          二、提取字典
          ?
          ??? 1、提取到平面文件
          ?
          ??? 必須在啟動(dòng)文件中指定UTL_FILE_DIR參數(shù),以放置字典文件的目錄
          ?
          ??? 執(zhí)行 DBMS_LOGMNR_D.BUILD('dictionary.ora', 'D:/oracle/logminer', options => DBMS_LOGMNR_D.STORE_IN_FLAT_FILE); 來(lái)創(chuàng)建平面文件
          ?
          ??? < 注:不加STORE_IN_FLAT_FILE也可,因?yàn)橛械刂返哪J(rèn)均是FLAT_FILE >
          ?
          ??? 2、提取到重做日志文件
          ?
          ??? DBMS_LOGMNR_D.BUILD(options => DBMS_LOGMNR_D.STORE_IN_REDO_LOGS);
          ?
          ??? < 注:要提取到重做日志文件時(shí),數(shù)據(jù)庫(kù)必須要運(yùn)行在ARCHIVELOG模式下 >
          ?
          ?
          三、指定要分析的重做日志文件
          ?
          ??? 1、通過(guò)NEW來(lái)創(chuàng)建重做日志文件的列表
          ?
          ??????? DBMS_LOGMNR.ADD_LOGFILE(LOGFILENAME => 'D:\oracle\oradata\kaka\redo01.log', options => DBMS_LOGMNR.NEW);
          ??????? --若再次NEW時(shí),則前面的記錄全部丟棄
          ?
          ??? 2、通過(guò)ADDFILE來(lái)添加更多的重做日志文件
          ?
          ??????? DBMS_LOGMNR.ADD_LOGFILE(LOGFILENAME => 'D:\oracle\oradata\kaka\redo02.log', options => DBMS_LOGMNR.ADDFILE);
          ?
          ??? 3、通過(guò)REMOVEFILE來(lái)刪除列表中的重做日志文件
          ?
          ??????? DBMS_LOGMNR.ADD_LOGFILE(LOGFILENAME => 'D:\oracle\oradata\kaka\redo02.log', options => DBMS_LOGMNR.REMOVEFILE);
          ?
          ?
          四、啟動(dòng)LogMiner
          ?
          ??? 使用DBMS_LOGMNR.START_LOGMNR()來(lái)啟動(dòng)LogMiner
          ?
          ??? 1、指定數(shù)據(jù)字典
          ?
          ??????? DBMS_LOGMNR.START_LOGMNR(DICTFILENAME => 'D:/oracle/logminer/dictionary.ora');
          ?
          ??????? 重做日志:DICT_FROM_REDO_LOGS
          ??????? 聯(lián)機(jī)字典:DICT_FROM_ONLINE_CATALOG
          ?
          ??? 2、可以指定時(shí)間篩選
          ?
          ??????? DBMS_LOGMNR.START_LOGMNR(DICTFILENAME => 'D:/oracle/logminer/dictionary.ora', STARTTIME => TO_DATE('2008-12-15 08:30:00', 'YYYY-MM-DD HH24:MI:SS'), ENDTIME => TO_DATE('2008-12-15 17:30:00', 'YYYY-MM-DD HH24:MI:SS'));
          ?
          ??? 3、使用SCN判斷時(shí)間
          ?
          ??????? DBMS_LOGMNR.START_LOGMNR(DICTFILENAME => 'D:/oracle/logminer/dictionary.ora', STARTSCN => 100, ENDSCN => 150);
          ?
          ??? 4、使用OPTIONS參數(shù)設(shè)置以下特性:
          ?
          ??????? ① COMMITTED_DATA_ONLY:只顯示已提交事務(wù)的行
          ??????????? 這個(gè)特性可以篩選出回滾事務(wù)以及進(jìn)程中事務(wù),但是若事務(wù)長(zhǎng)時(shí)間運(yùn)行,將引起“Out of Memory”錯(cuò)誤
          ?
          ??????? ② SKIP_CORRUPTION:跳過(guò)重做日志損壞的地方
          ??????????? 對(duì)于每個(gè)受損壞的記錄,都會(huì)返回一行信息指出跳過(guò)多少塊,若第1個(gè)信息就損壞則中斷操作
          ?
          ??????? ③ DDL_DICT_TRACKING:使用平面/重做日志數(shù)據(jù)字典時(shí)保持更新
          ??????????? 確保了SQL_REDO和SQL_UNDO的正確性,但對(duì)于DICT_FROM_RESET_ONSELECT無(wú)效
          ?
          ??????? ④ NO_DICT_RESET_ONSELECT:在查詢V$LOGMNR_CONTENTS時(shí)避免重載數(shù)據(jù)字典
          ??????????? 這個(gè)指令與DDL_DICT_TRACKING正好相反,但是優(yōu)先級(jí)大于DDL_DICT_TRACKING
          ?
          ??????? ⑤ DICT_FROM_ONLINE_CATALOG:采用數(shù)據(jù)庫(kù)當(dāng)前使用的字典
          ??????????? 這個(gè)指令優(yōu)先級(jí)小于DDL_DICT_TRACKING,若設(shè)置了那個(gè)則這個(gè)無(wú)效
          ?
          ??????? ⑥ DICT_FROM_REDO_LOGS:在重做日志文件列表中找到一個(gè)字典
          ??????????? 這個(gè)特性有利于分析某一特定時(shí)間內(nèi)的數(shù)據(jù)
          ?
          ??????? 多個(gè)特性列表的舉例:
          ??????? DBMS_LOGMNR.START_LOGMNR(OPTIONS => DBMS_LOGMNR.DDL_DICT_TRACKING + DBMS_LOGMNR.NODICT_RESET_ONSELECT + ...);
          ?
          ?
          五、分析V$LOGMNR_CONTENTS的輸出
          ?
          ??? 使用SQL查詢V$LOGMNR_CONTENTS視圖,會(huì)從重做日志文件中依次獲得記錄返回,直到滿足啟動(dòng)時(shí)指定的篩選標(biāo)準(zhǔn),或重做日志結(jié)束。 除非使用了COMMITTED_DATA_ONLY,否則LogMiner將按SCN返回所有行。
          ?
          ??? 舉例說(shuō)明SELECT V$LOGMNR_CONTENTS的性質(zhì):
          ?
          ??? 第一次查詢:SELECT SQL_REDO FROM V$LOGMNR_CONTENTS;
          ??? SQL_REDO
          ??? -----------------------------------------------------------------------------------------------
          ??? create table scott.t1(id int,name varchar2(30),mark varchar2(100));
          ??? insert into "SCOTT"."T1"("ID","NAME","MARK") vlues (10,'bob','aaaaa');
          ??? insert into "SCOTT"."T1"("ID","NAME","MARK") vlues (11,'tom','bbbbb');
          ??? commit;
          ??? alter table scott.t1 drop(mark);
          ??? insert into "SCOTT"."T1"("ID","NAME") vlues (12,'jac');
          ??? commit;
          ?
          ??? 此時(shí)在內(nèi)部的數(shù)據(jù)字典中,由于執(zhí)行了drop,內(nèi)部字典已經(jīng)沒(méi)有了mark列,若設(shè)置了NO_DICT_RESET_ONSELECT,則會(huì)出現(xiàn)以下情況:
          ?
          ??? 第二次查詢:SELECT SQL_REDO FROM V$LOGMNR_CONTENTS;
          ??? SQL_REDO
          ??? -----------------------------------------------------------------------------------------------
          ??? create table scott.t1(id int,name varchar2(30),mark varchar2(100));
          ??? insert into "SCOTT"."T1"("COL 1","COL 2","COL 3") vlues (HEXTORAW('78fes78r'),HEXTORAW('vtf43tf4'),HEXTORAW('32f4eff8'));
          ??? insert into "SCOTT"."T1"("COL 1","COL 2","COL 3") vlues (HEXTORAW('4gf3revw'),HEXTORAW('32frdsf3'),HEXTORAW('b432cer3'));
          ??? commit;
          ??? alter table scott.t1 drop(mark);
          ??? insert into "SCOTT"."T1"("ID","NAME") vlues (12,'jac');
          ??? commit;
          ?
          ??? 前面兩個(gè)insert語(yǔ)句因?yàn)樽值渲腥鄙倭薽ark列,所以要使用COL 和 HEXTORAW
          ?
          ??? 所以:若需要多次查詢,則不可以設(shè)置NO_DICT_RESET_ONSELECT
          ?
          ?
          六、結(jié)束LogMiner
          ?
          ??? DBMS_LOGMNR.END_LOGMNR;
          ?
          ??? ① 當(dāng)使用該語(yǔ)句時(shí),將關(guān)閉所有日志文件,并釋放所有LogMiner分配的數(shù)據(jù)庫(kù)和系統(tǒng)資源。
          ?
          ??? ② 若沒(méi)有使用該語(yǔ)句,則會(huì)保持分配的資源直到啟動(dòng)LogMiner的會(huì)話結(jié)束。
          ?
          ??? ③ 若使用了DDL_DICT_TRACKING或DICT_FROM_REDO_LOGS選項(xiàng),則務(wù)必要使用該語(yǔ)句,否則會(huì)造成系統(tǒng)資源的浪費(fèi)。
          ?
          ?
          ?
          posted on 2008-12-04 23:08 decode360 閱讀(138) 評(píng)論(0)  編輯  收藏 所屬分類: 10.DB_Tools
          主站蜘蛛池模板: 张家界市| 松江区| 深圳市| 青铜峡市| 峨山| 南漳县| 通榆县| 随州市| 白城市| 吉首市| 米脂县| 中卫市| 金乡县| 塔城市| 高雄县| 锡林浩特市| 扎囊县| 乌什县| 平度市| 南康市| 沭阳县| 土默特左旗| 绥芬河市| 辽源市| 开鲁县| 攀枝花市| 远安县| 抚宁县| 渑池县| 乌拉特后旗| 甘肃省| 东平县| 民乐县| 泰和县| 宜君县| 宕昌县| 通辽市| 慈溪市| 柳河县| 逊克县| 二连浩特市|