Oracle回滾表空間丟失或損壞處理方法(1)
2024-08-29 13:38:08
供稿:網(wǎng)友
問題描述: 這是一個(gè)回滾段表空間數(shù)據(jù)文件丟失或損壞的情景,這時(shí) Oracle 不能識(shí)別相應(yīng)的數(shù)據(jù)文件。當(dāng)你試圖 startup 數(shù)據(jù)文件時(shí)會(huì)報(bào) ORA-1157 , ORA-1110 ,并且可能會(huì)伴隨著標(biāo)識(shí)操作系統(tǒng)級(jí)別的錯(cuò)誤,比如 ORA-7360 。 當(dāng)你試圖以 shutdown normal 或 shutdown immediate 模式關(guān)閉數(shù)據(jù)庫時(shí)會(huì)導(dǎo)至 ORA-1116,ORA-1110, 并可能伴隨標(biāo)識(shí)操作系統(tǒng)級(jí)別的錯(cuò)誤,比如 ORA-7368 ,有時(shí)以正常方式 shutdown 數(shù)據(jù)庫根本 shutdown 不下來。 警告: 文章中所提及的步驟是供 oracle的全球技術(shù)支持使用的。非凡是步驟6中的_corrupted_rollback_segments參數(shù),使用后需要重建數(shù)據(jù)庫,在使用這個(gè)參前請觀察一下所有其它的選項(xiàng)。 解決方法解釋: 如下的解決方法取于檢測問題出現(xiàn)時(shí)數(shù)據(jù)庫所處于狀態(tài) : I. 數(shù)據(jù)庫是處于關(guān)閉狀態(tài)的。 試圖打開數(shù)據(jù)庫時(shí)報(bào) ORA-1157 和 ORA-1110 錯(cuò)誤,這時(shí)的解決方法取于數(shù)據(jù)庫是否是正常 shutdown 的 ( 使用 normal 或 immediate 選項(xiàng)。 I.A. 數(shù)據(jù)庫是正常 shutdown 的 假如數(shù)據(jù)數(shù)據(jù)庫是正常 shutdown 的,最簡單的解決方法是以 offline drop 選項(xiàng)刪除丟失或損壞的數(shù)據(jù)文件,以 restriceted 模式打個(gè)數(shù)據(jù)庫,刪除并重建這個(gè)數(shù)據(jù)文件所屬的那個(gè)回滾表空間。假如數(shù)據(jù)庫是以 shutdown abort 或自己崩潰掉的則不要遵循這個(gè)過程。 步驟如下: 1 、確認(rèn)數(shù)據(jù)庫是正常 shutdown 的。可以檢查 alter.log 這個(gè)文件,定位到最后幾行看是否可以看到如下的信息: "alter database dismount Completed: alter database dismount" 這當(dāng)然也包括以正常方式 shutdown, 接然試圖啟動(dòng)數(shù)據(jù)庫確失敗的狀況。假如最近一次你是以 shutdown abort 方式關(guān)閉數(shù)據(jù)庫的或數(shù)據(jù)庫是自己 crashed 掉的,你應(yīng)用使用下面的 I.B 的方法。 2 、在 init.ora 中把屬于丟失數(shù)據(jù)文件的回滾段從 ROLLBACK_SEGMENTS 參數(shù)中去掉。假如你不能確信是哪個(gè)回滾段,可以簡單的把 ROLLBACK_SEGMENTS 這個(gè)參數(shù)注釋掉。 3 、以 restricted 模式 mount 數(shù)據(jù)庫 STARTUP RESTRICT MOUNT; 4 、 Offline drop 丟失或損壞的那個(gè)數(shù)據(jù)文件。 ALTER DATABASE DATAFILE '' OFFLINE DROP; 5 、打開數(shù)據(jù)庫 ALTER DATABASE OPEN ; 假如返回 "Statement PRocessed" 這條信息,轉(zhuǎn)到第 7 步 . 假如得到 ORA-604,ORA-376, 和 ORA-1110 錯(cuò)誤,轉(zhuǎn)到第 6 步。 6 、因?yàn)榇蜷_數(shù)據(jù)庫失敗, shutdown 掉數(shù)據(jù)庫并且編輯 int.ora 這個(gè)文件。注釋掉 ROLLBACK_SEGMENTS 這個(gè)參數(shù),并且在 init.ora 文件中加入如下一行: _corrupted_rollback_segments = (,...,) 這個(gè)參數(shù)應(yīng)當(dāng)包含 ROLLBACK_SEGMENTS 中所有的回滾段。 需要注重的是這個(gè)參數(shù)只能在指定的情況下或在 oracle 的全球持術(shù)支持的指導(dǎo)下才應(yīng)使用,然后以 restricted 模式打開數(shù)據(jù)庫: STARTUP RESTRICT 7 、刪除掉那個(gè)文件所屬的回滾段表空間。 DROP TABLESPACE INCLUDING CONTENTS; 8 、重建回滾段表空間及回滾段,創(chuàng)建完后使它們 online. 9 、使數(shù)據(jù)庫所有用戶都可用。 ALTER SYSTEM DISABLE RESTRICTED session; 10 、在 init.ora 中把你重新創(chuàng)建的回滾段再一次包括進(jìn)來,假如你使用了第 6 步則移除掉 CORRUPTED_ROLLBACK_SEGMENTS 這個(gè)參數(shù)。 I.B. 數(shù)據(jù)庫不是正常 shutdown 的 這種情況,數(shù)據(jù)庫最近一次是用 shutdown abort 或 crashed 掉關(guān)閉,回滾段中幾乎一定包含著活動(dòng)的事務(wù)。因此,壞的那個(gè)數(shù)據(jù)文件不能脫機(jī) (offline) 或是 drop 掉,你必需從備份恢復(fù)這個(gè)文件。假如數(shù)據(jù)為是處于非歸檔模式的,只有最近的一些事務(wù)日志還沒有被重寫掉的情況你才能成功恢復(fù)這個(gè)文件。假如這個(gè)文件的備份也是無效的,聯(lián)系一下 oracle 的技術(shù)支持吧。 步驟如下: 1 、從備份中恢復(fù)丟失的那個(gè)數(shù)據(jù)文件 . 2 、 mount 上數(shù)據(jù)庫 3 、執(zhí)行如下的查詢:
SELECT FILE#,NAME,STATUS FROM V$DATAFILE; 假如數(shù)據(jù)文件的狀態(tài)是 offline 的,你必需先把它聯(lián)機(jī)了: ALTER DATABASE DATAFILE '' ONLINE; 4 、執(zhí)行如下的查詢: SELECT V1.GROUP#, MEMBER, SEQUENCE#, FIRST_CHANGE# FROM V$LOG V1, V$LOGFILE V2 WHERE V1.GROUP# = V2.GROUP# ; 這將列出所有的聯(lián)機(jī)的重做日志和他們的序號(hào)及首次改變號(hào) (first change numbers). 5 、假如這個(gè)數(shù)據(jù)庫是非歸檔模式的,執(zhí)行如下的查詢: SELECT FILE#, CHANGE# FROM V$RECOVER_FILE; 假如其中的 CHANG# 比 4 中的最小的那個(gè) FIRST_CHANGE# 大的話,用聯(lián)機(jī)日志就可以完成恢復(fù)。 6 、假如 CHANG# 比 4 中的最小的那個(gè) FIRST_CHANGE# 小,則數(shù)據(jù)庫是不能恢復(fù)的,可以聯(lián)系一下 oracle 的技術(shù)支持。 譯者插入:假如你真是非歸檔方式且這個(gè)文件的備份也是無效的,假如你認(rèn)為可以丟失回滾段中的那事務(wù),你可以用 I.A中從第6步的方法,這時(shí)可以打開數(shù)據(jù)庫,應(yīng)立即做一個(gè)備份,因?yàn)閹熘械臄?shù)據(jù)有些不一致。 RECOVER DATAFILE '' 7 、確認(rèn)所有的日志都被恢復(fù),只到你收到 "Media recovery complete" 信息。 8 、打開數(shù)據(jù)庫