熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle回滾表空間丟失或損壞處理方法(1)

2013-11-13 22:17:29  來源: Oracle 

  問題描述 這是一個回滾段表空間數據文件丟失或損壞的情景這時 oracle 不能識別相應的數據文件當你試圖 startup 數據文件時會報 ORA ORA 並且可能會伴隨著標識操作系統級別的錯誤比如 ORA 當你試圖以 shutdown normal 或 shutdown immediate 模式關閉數據庫時會導至 ORAORA 並可能伴隨標識操作系統級別的錯誤比如 ORA 有時以正常方式 shutdown 數據庫根本 shutdown 不下來 警告 文章中所提及的步驟是供 oracle的全球技術支持使用的特別是步驟中的_corrupted_rollback_segments參數使用後需要重建數據庫在使用這個參前請觀察一下所有其它的選項 解決方法解釋 如下的解決方法取於檢測問題出現時數據庫所處於狀態 : I 數據庫是處於關閉狀態的 試圖打開數據庫時報 ORA 和 ORA 錯誤這時的解決方法取於數據庫是否是正常 shutdown 的 ( 使用 normal 或 immediate 選項 IA 數據庫是正常 shutdown 的 如果數據數據庫是正常 shutdown 的最簡單的解決方法是以 offline drop 選項刪除丟失或損壞的數據文件以 restriceted 模式打個數據庫刪除並重建這個數據文件所屬的那個回滾表空間如果數據庫是以 shutdown abort 或自己崩潰掉的則不要遵循這個過程 步驟如下 確認數據庫是正常 shutdown 的可以檢查 alterlog 這個文件定位到最後幾行看是否可以看到如下的信息 alter database dismount Completed: alter database dismount 這當然也包括以正常方式 shutdown 接然試圖啟動數據庫確失敗的狀況如果最近一次你是以 shutdown abort 方式關閉數據庫的或數據庫是自己 crashed 掉的你應用使用下面的 IB 的方法 在 initora 中把屬於丟失數據文件的回滾段從 ROLLBACK_SEGMENTS 參數中去掉如果你不能確信是哪個回滾段可以簡單的把 ROLLBACK_SEGMENTS 這個參數注釋掉 以 restricted 模式 mount 數據庫 STARTUP RESTRICT MOUNT; Offline drop 丟失或損壞的那個數據文件 ALTER DATABASE DATAFILE OFFLINE DROP; 打開數據庫 ALTER DATABASE OPEN 如果返回 Statement processed 這條信息轉到第 如果得到 ORAORA 和 ORA 錯誤轉到第 因為打開數據庫失敗 shutdown 掉數據庫並且編輯 intora 這個文件注釋掉 ROLLBACK_SEGMENTS 這個參數並且在 initora 文件中加入如下一行 _corrupted_rollback_segments = () 這個參數應當包含 ROLLBACK_SEGMENTS 中所有的回滾段 需要注意的是這個參數只能在指定的情況下或在 oracle 的全球持術支持的指導下才應使用然後以 restricted 模式打開數據庫 STARTUP RESTRICT 刪除掉那個文件所屬的回滾段表空間 DROP TABLESPACE INCLUDING CONTENTS; 重建回滾段表空間及回滾段創建完後使它們 online 使數據庫所有用戶都可用 ALTER SYSTEM DISABLE RESTRICTED SESSION; 在 initora 中把你重新創建的回滾段再一次包括進來如果你使用了第 步則移除掉 CORRUPTED_ROLLBACK_SEGMENTS 這個參數 IB 數據庫不是正常 shutdown 的 這種情況數據庫最近一次是用 shutdown abort 或 crashed 掉關閉回滾段中幾乎一定包含著活動的事務因此壞的那個數據文件不能脫機 (offline) 或是 drop 掉你必需從備份恢復這個文件如果數據為是處於非歸檔模式的只有最近的一些事務日志還沒有被重寫掉的情況你才能成功恢復這個文件如果這個文件的備份也是無效的聯系一下 oracle 的技術支持吧 步驟如下 從備份中恢復丟失的那個數據文件 mount 上數據庫 執行如下的查詢 SELECT FILE#NAMESTATUS FROM V$DATAFILE; 如果數據文件的狀態是 offline 的你必需先把它聯機了 ALTER DATABASE DATAFILE ONLINE; 執行如下的查詢 SELECT VGROUP# MEMBER SEQUENCE# FIRST_CHANGE# FROM V$LOG V V$LOGFILE V WHERE VGROUP# = VGROUP# ; 這將列出所有的聯機的重做日志和他們的序號及首次改變號 (first change numbers) 如果這個數據庫是非歸檔模式的執行如下的查詢 SELECT FILE# CHANGE# FROM V$RECOVER_FILE; 如果其中的 CHANG# 比 中的最小的那個 FIRST_CHANGE# 大的話用聯機日志就可以完成恢復 如果 CHANG# 比 中的最小的那個 FIRST_CHANGE# 小則數據庫是不能恢復的可以聯系一下 oracle 的技術支持 譯者插入如果你真是非歸檔方式且這個文件的備份也是無效的如果你認為可以丟失回滾段中的那事務你可以用 IA中從第步的方法這時可以打開數據庫應立即做一個備份因為庫中的數據有些不一致 RECOVER DATAFILE 確認所有的日志都被恢復只到你收到 Media recovery complete 信息 打開數據庫
From:http://tw.wingwit.com/Article/program/Oracle/201311/18704.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.