Oracle資料庫系統緊急故障處理方法(轉)

gugu99發表於2007-08-13
Oracle資料庫系統緊急故障處理方法(轉)[@more@]

  Oracle物理結構故障是指構成資料庫的各個物理檔案損壞而導致的各種資料庫故障。這些故障可能是由於硬體故障造成的,也可能是人為誤操作而引起。所以我們首先要判斷問題的起因,如果是硬體故障則首先要解決硬體問題。在無硬體問題的前提下我們才能按照下面的處理方發來進一步處理。

  控制檔案損壞:

  控制檔案記錄了關於oracle的重要配置資訊,如資料庫名、字符集名字、各個資料檔案、日誌檔案的位置等等資訊。控制檔案的損壞,會導致資料庫異常關閉。一旦缺少控制檔案,資料庫也無法啟動,這是一種比較嚴重的錯誤。

  損壞單個控制檔案:

  1. 確保資料庫已經關閉,如果沒有用下面的命令來關閉資料庫:

  svrmgrl>shutdown immediate;

  2. 檢視初始化檔案$ORACLE_BASE/admin/pfile/initORCL.ora,確定所有控制檔案的路徑。

  3. 用作業系統命令將其它正確的控制檔案覆蓋錯誤的控制檔案。

  4. 用下面的命令重新啟動資料庫:

  svrmgrl>startup;

  5. 用適當的方法進行資料庫全備份。

  損壞所有的控制檔案:

  1. 確保資料庫已經關閉,如果沒有用下面的命令來關閉資料庫:

  svrmgrl>shutdown immediate;

  2. 從相應的備份結果集中恢復最近的控制檔案。對於沒有采用帶庫備份的點可以直接從磁帶上將最近的控制檔案備份恢復到相應目錄;對於採用帶庫備份的點用相應的rman指令碼來恢復最近的控制檔案。

  3. 用下面的命令來建立產生資料庫控制檔案的指令碼:

  svrmgrl>startup mount;

  svrmgrl>alter database backup controlfile to trace noresetlogs;

  4. 修改第三步產生的trace檔案,將其中關於建立控制檔案的一部分語句複製出來並做些修改,使得它能夠體現最新的資料庫結構。假設產生的sql檔名字為createcontrol.sql.

  注意:

  Trace檔案的具體路徑可以在執行完第3)步操作後檢視$ORACLE_BASE/admin/bdump/alert_ORCL.ora檔案來確定。

  5. 用下面命令重新建立控制檔案:

  svrmgrl>shutdown abort;

  svrmgrl>startup nomount;

  svrmgrl>@createcontrol.sql;

  6. 用適當的方法進行資料庫全備份。

  重做日誌檔案損壞:

  資料庫的所有增、刪、改都會記錄入重做日誌。如果當前啟用的重做日誌檔案損壞,會導致資料庫異常關閉。非啟用的重做日誌最終也會因為日誌切換變為啟用的重做日誌,所以損壞的非啟用的重做日誌最終也會導致資料庫的異常終止。在ipas/mSwitch中每組重做日誌只有一個成員,所以在下面的分析中只考慮重做日誌組損壞的情況,而不考慮單個重做日誌成員損壞的情況。

  確定損壞的重做日誌的位置及其狀態:

  1. 如果資料庫處於可用狀態:

  select * from v$logfile;

  svrmgrl>select * from v$log;

  2. 如果資料庫處於已經異常終止:

  svrmlgr>startup mount;

  svrmgrl>select * from v$logfile;

  svrmgrl>select * from v$log;

  其中,logfile的狀態為INVALID表示這組日誌檔案出現已經損壞;log狀態為Inactive:表示重做日誌檔案處於非啟用狀態;Active: 表示重做日誌檔案處於啟用狀態;Current:表示是重做日誌為當前正在使用的日誌檔案。

  損壞的日誌檔案處於非啟用狀態:

  1. 刪除相應的日誌組:

  svrmgrl>alter database drop logfile group group_number;

  2. 重新建立相應的日誌組:

  svrmgrl>alter database add log file group group_number (’log_file_descritpion’,…) size log_file_size;

  損壞的日誌檔案處於啟用狀態且為非當前日誌:

  1. 清除相應的日誌組:

  svrmgrl>alter database clear unarchived logfile group group_number;

  損壞的日誌檔案為當前活動日誌檔案:

  用命令清除相應的日誌組:

  svrmgrl>alter database clear unarchived logfile group group_number;

  如果清除失敗,則只能做基於時間點的不完全恢復。

  開啟資料庫並且用適當的方法進行資料庫全備份:

  svrmgrl>alter database open;

  部分資料檔案損壞:

  若損壞的資料檔案屬於非system表空間,則資料庫仍然可以處於開啟狀態可以進行操作,只是損壞的資料檔案不能訪問。這時在資料庫開啟狀態下可以單獨對損壞的資料檔案進行恢復。若是system表空間的資料檔案損壞則資料庫系統會異常終止。這時資料庫只能以Mount方式開啟,然後再對資料檔案進行恢復。可以透過檢視資料庫日誌檔案來判斷當前損壞的資料檔案到底是否屬於system表空間。


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

相關文章