Decode360's Blog

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

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
            397 隨筆 :: 33 文章 :: 29 評(píng)論 :: 0 Trackbacks
          Oracle備份/恢復(fù)案例05——LogFile恢復(fù)

          一、損壞非當(dāng)前聯(lián)機(jī)日志
          ?
          大家都清楚,聯(lián)機(jī)日志分為當(dāng)前聯(lián)機(jī)日志和非當(dāng)前聯(lián)機(jī)日志,非當(dāng)前聯(lián)機(jī)日志的損壞是比較簡(jiǎn)單的,一般通過(guò)clear命令就可以解決問(wèn)題。
          ?
          1、關(guān)閉數(shù)據(jù)庫(kù),刪除重做日志文件
          ?
          SQL> shutdown immediate;
          Database closed.
          Database dismounted.
          ORACLE instance shut down.
          ?
          C:>del D:\oracle\oradata\dodo\REDO03.LOG
          ?
          2、啟動(dòng)數(shù)據(jù)庫(kù),遇到ORA-00312 or ORA-00313錯(cuò)誤,如
          ?
          SQL> startup;
          ORACLE instance started.
          Total System Global Area? 135338868 bytes
          Fixed Size?????????????????? 453492 bytes
          Variable Size???????????? 109051904 bytes
          Database Buffers?????????? 25165824 bytes
          Redo Buffers???????????????? 667648 bytes
          Database mounted.
          ORA-00313: open failed for members of log group 3 of thread 1
          ORA-00312: online log 3 thread 1: 'D:\ORACLE\ORADATA\DODO\REDO03.LOG'
          從這里我們知道日志組3的數(shù)據(jù)文件損壞了
          從報(bào)警文件可以看到更詳細(xì)的信息
          ?
          3、查看V$log視圖
          ?
          SQL> select group#,sequence#,archived,status from v$log;
          ??? GROUP#? SEQUENCE# ARCHIVED?? STATUS
          ---------- ---------- ---------- -----------
          ???????? 1????????? 1 NO???????? CURRENT
          ???????? 2????????? 0 YES??????? UNUSED
          ???????? 3????????? 0 YES??????? UNUSED

          可以知道,該組是非當(dāng)前狀態(tài),而且已經(jīng)歸檔。

          4、用CLEAR命令重建該日志文件

          SQL>alter database clear logfile group 3;

          如果是該日志組還沒(méi)有歸檔,則需要用:

          SQL>alter database clear unarchived logfile group 3;

          5、打開(kāi)數(shù)據(jù)庫(kù),重新備份數(shù)據(jù)庫(kù)

          SQL>alter database open;
          ?
          ?
          說(shuō)明:

          1、如果損壞的是非當(dāng)前的聯(lián)機(jī)日志文件,一般只需要clear就可以重建該日志文件,但是如果該數(shù)據(jù)庫(kù)處于歸檔狀態(tài)但該日志還沒(méi)有歸檔,就需要強(qiáng)行clear。
          2、建議clear,特別是強(qiáng)行clear后作一次數(shù)據(jù)庫(kù)的全備份
          3、此方法適用于歸檔與非歸檔數(shù)據(jù)庫(kù)
          ?
          ?

          二、 損壞當(dāng)前聯(lián)機(jī)日志

          歸檔模式下當(dāng)前日志的損壞有兩種情況:
          ?
          一、是數(shù)據(jù)庫(kù)是正常關(guān)閉,日志文件中沒(méi)有未決的事務(wù)需要實(shí)例恢復(fù),當(dāng)前日志組的損壞就可以直接用alter database clear unarchived logfile group n來(lái)重建。
          二、是日志組中有活動(dòng)的事務(wù),數(shù)據(jù)庫(kù)需要介質(zhì)恢復(fù),日志組需要用來(lái)同步,有兩種補(bǔ)救辦法:
          ??? A. 最好的辦法就是通過(guò)不完全恢復(fù),可以保證數(shù)據(jù)庫(kù)的一致性,但是這種辦法要求在歸檔方式下,并且有可用的備份
          ??? B. 通過(guò)強(qiáng)制性恢復(fù),但是可能導(dǎo)致數(shù)據(jù)庫(kù)不一致。
          ?
          下面分別用來(lái)說(shuō)明這兩種恢復(fù)方法

          1.通過(guò)備份來(lái)恢復(fù)
          ?
          1、關(guān)閉數(shù)據(jù)庫(kù),刪除當(dāng)前Logfile,再打開(kāi)數(shù)據(jù)庫(kù)時(shí),遇到一個(gè)類(lèi)似的錯(cuò)誤

          SQL> shutdown immediate;
          Database closed.
          Database dismounted.
          ORACLE instance shut down.
          ?
          C:>del D:\oracle\oradata\dodo\REDO01.LOG
          ?
          SQL> startup;
          ORACLE instance started.
          Total System Global Area? 135338868 bytes
          Fixed Size?????????????????? 453492 bytes
          Variable Size???????????? 109051904 bytes
          Database Buffers?????????? 25165824 bytes
          Redo Buffers???????????????? 667648 bytes
          Database mounted.
          ORA-00313: open failed for members of log group 1 of thread 1
          ORA-00312: online log 1 thread 1: 'D:\ORACLE\ORADATA\DODO\REDO01.LOG'
          報(bào)警日志中的描述如下:
          ?
          ORA-00313: open failed for members of log group 1 of thread 1
          ORA-00312: online log 1 thread 1: 'D:\ORACLE\ORADATA\DODO\REDO01.LOG'
          ORA-27041: unable to open file
          OSD-04002: 無(wú)法打開(kāi)文件
          O/S-Error: (OS 2) 系統(tǒng)找不到指定的文件。
          ?
          2、查看V$log,發(fā)現(xiàn)是當(dāng)前日志
          ?
          SQL> select group#,sequence#,archived,status from v$log;
          ??? GROUP#? SEQUENCE# ARCHIVED?? STATUS
          ---------- ---------- ---------- ----------------
          ???????? 1????????? 1 NO???????? CURRENT
          ???????? 2????????? 0 YES??????? UNUSED
          ???????? 3????????? 0 YES??????? UNUSED

          3、發(fā)現(xiàn)clear不成功

          SQL> alter database clear unarchived logfile group 1;
          alter database clear unarchived logfile group 1
          *
          ERROR at line 1:
          ORA-00313: open failed for members of log group 1 of thread 1
          ORA-00312: online log 1 thread 1: 'D:\ORACLE\ORADATA\DODO\REDO01.LOG'
          ORA-27041: unable to open file
          OSD-04002: 無(wú)法打開(kāi)文件
          O/S-Error: (OS 2) 系統(tǒng)找不到指定的文件。

          4、拷貝有效的數(shù)據(jù)庫(kù)的全備份,并不完全恢復(fù)數(shù)據(jù)庫(kù)
          ?
          可以采用獲取最近的SCN的辦法用until scn恢復(fù)或用until cnacel恢復(fù)
          recover database until cancel

          先選擇auto,盡量恢復(fù)可以利用的歸檔日志,然后重新
          recover database until cancel

          這次輸入cancel,完成不完全恢復(fù),也就是說(shuō)恢復(fù)兩次。

          SQL> recover database until cancel;
          Auto
          ……
          SQL> recover database until cancel;
          Cancel;

          5、利用alter database open resetlogs打開(kāi)數(shù)據(jù)庫(kù)

          ?
          說(shuō)明:
          1、這種辦法恢復(fù)的數(shù)據(jù)庫(kù)是一致的不完全恢復(fù),會(huì)丟失當(dāng)前聯(lián)機(jī)日志中的事務(wù)數(shù)據(jù)
          2、這種方法適合于歸檔數(shù)據(jù)庫(kù)并且有可用的數(shù)據(jù)庫(kù)全備份。
          3、恢復(fù)成功之后,記得再做一次數(shù)據(jù)庫(kù)的全備份。
          4、建議聯(lián)機(jī)日志文件一定要實(shí)現(xiàn)鏡相在不同的磁盤(pán)上,避免這種情況的發(fā)生,因?yàn)槿魏螖?shù)據(jù)的丟失對(duì)于生產(chǎn)來(lái)說(shuō)都是不容許的。
          ?
          ?
          2.如果沒(méi)有備份,進(jìn)行強(qiáng)制性恢復(fù)

          1、打開(kāi)數(shù)據(jù)庫(kù),會(huì)遇到一個(gè)類(lèi)似的錯(cuò)誤

          ORA-00313: open failed for members of log group 1 of thread 1
          ORA-00312: online log 1 thread 1: 'D:\ORACLE\ORADATA\DODO\REDO01.LOG'
          ORA-27041: unable to open file
          OSD-04002: 無(wú)法打開(kāi)文件
          O/S-Error: (OS 2) 系統(tǒng)找不到指定的文件。

          2、查看V$log,發(fā)現(xiàn)是當(dāng)前日志

          SQL> select group#,sequence#,archived,status from v$log;
          ??? GROUP#? SEQUENCE# ARCHIVED?? STATUS
          ---------- ---------- ---------- ----------------
          ???????? 1????????? 1 NO???????? CURRENT
          ???????? 2????????? 0 YES??????? UNUSED
          ???????? 3????????? 0 YES??????? UNUSED

          3、發(fā)現(xiàn)clear不成功

          SQL> alter database clear unarchived logfile group 1;
          alter database clear unarchived logfile group 1
          *
          ERROR at line 1:
          ORA-00313: open failed for members of log group 1 of thread 1
          ORA-00312: online log 1 thread 1: 'D:\ORACLE\ORADATA\DODO\REDO01.LOG'
          ORA-27041: unable to open file
          OSD-04002: 無(wú)法打開(kāi)文件
          O/S-Error: (OS 2) 系統(tǒng)找不到指定的文件。

          4、把數(shù)據(jù)庫(kù)down掉

          SQL>shutdown immediate

          5、在spfile中加入如下參數(shù)

          _allow_resetlogs_corruption=TRUE

          6、重新啟動(dòng)數(shù)據(jù)庫(kù),利用until cancel恢復(fù)

          SQL>recover database until cancel;
          Cancel

          如果出錯(cuò),不再理會(huì),發(fā)出:

          SQL>alter database open resetlogs;

          7、數(shù)據(jù)庫(kù)被打開(kāi)后,馬上執(zhí)行一個(gè)full export

          8、shutdown數(shù)據(jù)庫(kù),去掉_all_resetlogs_corrupt參數(shù)

          9、重建庫(kù)

          10、import并完成恢復(fù)

          11、建議執(zhí)行一下ANALYZE TABLE ...VALIDATE STRUCTURE CASCADE;
          ?

          說(shuō)明:

          1、該恢復(fù)方法是沒(méi)有辦法之后的恢復(fù)方法,一般情況下建議不要采用,因?yàn)樵摲椒赡軐?dǎo)致數(shù)據(jù)庫(kù)的不一致
          2、該方法也丟失數(shù)據(jù),但是丟失的數(shù)據(jù)沒(méi)有上一種方法的數(shù)據(jù)多,主要是未寫(xiě)入數(shù)據(jù)文件的已提交或未提交數(shù)據(jù)。
          3、建議成功后嚴(yán)格執(zhí)行以上的7到11步,完成數(shù)據(jù)庫(kù)的檢查與分析
          4、全部完成后做一次數(shù)據(jù)庫(kù)的全備份
          5、建議聯(lián)機(jī)日志文件一定要實(shí)現(xiàn)鏡相在不同的磁盤(pán)上,避免這種情況的發(fā)生,因?yàn)槿魏螖?shù)據(jù)的丟失對(duì)于生產(chǎn)來(lái)說(shuō)都是不容許的。
          ?
          ?
          ?
          posted on 2008-12-18 22:37 decode360 閱讀(191) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 09.Recover

          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 五莲县| 资中县| 商南县| 横峰县| 双牌县| 农安县| 浙江省| 隆德县| 木兰县| 秭归县| 鲁甸县| 清水县| 额济纳旗| 民权县| 新邵县| 沁阳市| 广宗县| 大石桥市| 绩溪县| 富锦市| 焉耆| 闽侯县| 南昌县| 基隆市| 左云县| 鄂温| 胶南市| 丰原市| 沈丘县| 平罗县| 永定县| 万源市| 乌拉特中旗| 南岸区| 虎林市| 延津县| 施甸县| 凤庆县| 类乌齐县| 读书| 益阳市|