恢復Oracle表空間的方法

dawn009發表於2014-11-14

學習Oracle時,你可能會遇到oracle表空間恢復問題,這裡將介紹Oracle表空間恢復問題的解決方法,在這裡拿出來和大家分享一下。
    Oracle表空間恢復方案
    一。使用者表空間
    錯誤:
    在啟動時 出現ora-01157,ora-01110或作業系統級錯誤例如ora-07360, 在關閉資料庫(使用shutdown normal或shutdown immediate) 時將導致錯誤ora -01116,ora-01110以及作業系統級錯誤ora-07368
   ------&gt>比如下面的情況:
  
    以下有兩種解決方案:
    1.使用者的表空間可以被輕易地重建 即最近匯出的物件是可用的或表空間中的物件可以被輕易地重建等。在 這種情況下,最簡單的方法是offline並刪除該資料檔案,刪除表空間並 重建表空間以及所有的物件。
    svrmgrl> startup mount
    svrmgrl> alter database datafile filename offline drop;
    svrmgrl> alter database open;
    svrmgrl> drop tablespace tablespace_name including contents;
    重建表空間及所有物件。
    2.使用者的表空間不能夠被輕易地重建在大多數情況下,重建表空間是不可能及太辛苦的工作。方法是倒備份及做介質恢復。如果您的系統執行在noarchivelog模式下,則只有丟失的資料 在online redo log中方可被恢復。
    步驟如下:
    1)restore the lost datafile from a backup
    2)svrmgrl> startup mount
    3)svrmgrl> select v1.group#,member,sequence#,first_change# > from v$log v1,v$logfile v2 > where v1.group#=v2.group#;
    4)如果資料庫執行在noarchivelog模式下則: svrmgrl> select file#,change# from v$recover_file;
    如果 change# 大於最小的first_change#則資料檔案可以被恢復。 如果 change# 小於最小的first_change#則資料檔案不可恢復。 恢復最近一次的全備份或採用方案一。
    5)svrmgrl> recover datafile filename;
    6)確認表空間恢復成功
    7)svrmgrl> alter database open resetlogs;
    3.只讀表空間無需做介質恢復,只要將備份恢復即可。唯一的例外是:
    表空間在最後一次備份後被改為read-write 模式
    表空間在最後一次備份後被改為read-only 模式
    在這種情況下,均需進行介質恢復
    二。臨時表空間
    臨時表空間並不包含真正的資料,恢復的方法是刪除臨時表空間並重建即可。
    三。表空間
    如果備份不可用,則只能採用重建資料庫的方法

四。回滾表空間
    有兩種情況:
    1、資料庫已經完全關閉(使用shutdown immediate或shutdown命令)
    1) 確認資料庫完全關閉
    2) 修改init.ora檔案,註釋"rollback-segment"
    3) svrmgrl> startup restrict mount
    4) svrmgrl> alter database datafile filename offline drop;
    5) svrmgrl> alter database open;
    基於出現的結果:
    "statement processed"
    "ora-00604,ora-00376,ora-01110"
    6) svrmgrl> shutdown immediate 修改init.ora檔案,增加如下一行: _corrupted_rollback_segments = (,…) svrmgrl> startup restrict
    7) svrmgrl> drop tablespace tablespace_name including contents;
    8) 重建表空間及回滾段
    9) svrmgrl> alter system disable restricted session;
    10) 修改init.ora檔案
    2、資料庫未完全關閉(資料庫崩潰或使用shutdown abort命令關閉資料庫)
    1) Oracle表空間恢復備份
    2) svrmgrl> startup mount
    3) svrmgrl> select file#,name,status from v$datafile; svrmgrl> alter database datafile filename online;
    4) svrmgrl> select v1.group#,member,sequence#,first_change# > from v$log v1,v$logfile v2 > where v1.group#=v2.group#;
    5) svrmgrl> select file#,change# from v$recover_file;
    6) svrmgrl> recover datafile filename;
    7) svrmgrl> alter database open;
    3、資料庫處於開啟狀態
    1) 刪除回滾段和表空間
    2) 重建表空間和回滾段
    五。控制檔案恢復
    1.所有的控制檔案均被破壞
    將備份的控制檔案複製至原目錄下 對於raw device,則:
    dd if=con.bak of=/dev/rdrd/drd1 seek=128
    2.並非所有的控制檔案均被破壞
    用其他的控制檔案啟動資料庫

------&gt>

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29119536/viewspace-1332710/,如需轉載,請註明出處,否則將追究法律責任。

相關文章