logminer實戰記錄

時間:   2005-4-15   4PM
地點:   項目開發中心

1601:   程序員A驚呼:   我寫的procedure變成舊版本了!
1602:   程序員B:   我的也是
1603:   數據庫維護員C   (紅着臉跑來):  
            剛纔我把一期的數據庫建立文本跑了一遍,想裝在本機的,結果沒想到直接在開發服務器上運行了....
1610:   開發經理:   經過檢查,程序員的機器沒有備份程序   (   what   a   terriable   management   !)
1618:   開發停止,檢查損失:共有9個Package被誤編譯,從4月7日開發的新版本Package舊版本覆蓋
            大致損失10個工作日的程序量
1630:   開發經理和超人X緊急磋商解決方案.期間超人X通過專家Y諮詢,得到兩套方案
                    解決方案1:   recovery   in   time  
                    解決方案2:   logminer  
1640:   方案確定:   logminer   .   由於數據庫是運行在noarchivelog   模式,並且沒有任何備份,recovery   in   time   方案過於複雜,不可實施.

1645:   超人X開始實施解決方案1
            a.   鑑定當前active的redo   log   .   通過數據字典
            b.   得到此redo   log的log   switch時間點t1.
            c.   和開發經理確認所有的的Package新的編譯時間t2.
            d.   t2在t1之後,很幸運,只要通過active   redo   log   就應該能夠得到package的編碼.
            e.   停止所有程序員的數據庫聯接
            f.   telnet聯上數據庫服務器進行操作
            g.   生成數據字典文件,是通過dbms_logmnr_d.build()來完成。
                  (由於utl_file_dir= '* ',所以設置這個參數的步驟可以省略)  
                  SQL>   BEGIN
                  2           dbms_logmnr_d.build(
                  3               dictionary_filename   =>   'logminer.dat ',
                  4               dictionary_location   =>   '/oradata/home '
                  5           );
                  6     END;
                  7   /  
              h.   建立一個日誌分析表
                  a、建立日誌分析表數據庫必須在mount或nomount狀態,啓動數據庫到mount狀態。
                  sql> shutdown   immediate
                  sql> starup   mount

                  b、建立日誌分析表,使用dbms_logmnr.add_logfile()
                  SQL>   BEGIN
                  2           dbms_logmnr.add_logfile(
                  3               options   =>   dbms_logmnr.new,
                  4               logfilename   =>   '/oradata/home/redo2 '     --active的redolog
                  5           );
                  6     END;
                  7   /              
              i.啓動LogMiner進行分析。
              SQL>   BEGIN
              2           dbms_logmnr.start_logmnr(
              3               dictfilename   =>   '/u01/arch/logminer_dict.dat ',
              4               starttime   =>   to_date( '20050408   01:00:00 ', 'yyyymmdd   hh24:mi:ss '),   --小於t1  
              5               endtime   =>   to_date( '20050413   23:00:30 ', 'yyyymmdd   hh24:mi:ss ')         --大於t2  
              6           );
              7     END;
              8   /  

              j.查看日誌分析的結果,通過查詢v$logmnr_contents可以查詢到
              set   heading   off
              spool   packagename.txt  
              SELECT   sql_redo
              FROM   V$logmnr_contents
              WHERE   seg_name   =   'PACKAGENAME ';
              /
              spool   off
           
              重複j的過程爲每個package都生成output文件
              每個文件中最後的package應該爲最新的source
           
              k.結束LogMiner的分析。
              SQL> BEGIN
              2           dbms_logmnr.end_logmnr;
              3       end;
              4   /  

1930:     整個操作結束,所有package得到恢復!整個團隊對超人X表示感謝   :)

              結論:   a.source備份的重要性  
                          b.數據庫備份的重要性
                          c.logminer的神奇功效

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章