程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> 高手進階:一個回滾段損壞的修復實例

高手進階:一個回滾段損壞的修復實例

編輯:Oracle數據庫基礎

前幾天同事打電話過來,說公司的開發庫每天死4,5次

正好今天回公司,順道看了一下

檢查alertlog,發現成百上千的報錯,全部是:









Errors in file D:\oracle\admin\croot\bdump\crootSMON.TRC:
ORA-01578: ORACLE data block corrupted (file # 22, block # 14715)
ORA-01110: data file 22: 'D:\Oracle\ORADATA\CROOT\TRBS1.ORA'

file#=22的文件是回滾段表空間中的一個數據文件,很明顯回滾段數據塊損壞了。

但是數據庫還算能用,可以正常打開,但是無法正常關閉,

關閉的時候報:

Shutting down instance (immediate)
License high water mark = 90
Mon Oct 25 12:03:23 2004
ORACLE Instance croot (pid = 6) - Error 1578 encountered while 
recovering transaction (2, 50).
Mon Oct 25 12:03:23 2004
Errors in file D:\oracle\admin\croot\bdump\crootSMON.TRC:
ORA-01578: ORACLE data block corrupted (file # 22, block # 14715)
ORA-01110: data file 22: 'D:\Oracle\ORADATA\CROOT\TRBS1.ORA'

然後整個實例就crash了

檢查壞塊所在的對象,發現是RBS01,再檢查dba_rollback_segs視圖,發現除了RBS01是online狀態,其它的都是partitial available狀態,手工將其余的回滾段online以後,就無法再次offline了,立刻有active的transaction占據回滾段,停掉了所有的其它會話,仍然是這種情況,查看v$trasaction視圖,已經沒有任何記錄顯示還有正在運行的事務了。

這種情況,無法正常地drop掉回滾段,自然也就沒辦法drop掉回滾段表空間。

由於是開發庫,根本就是處於非歸檔模式,也沒有什麼定時的備份,所以恢復數據庫也不用想了。

不過也好在是開發庫,那些事務丟了也根本無所謂。

於是,關閉數據庫,修改初始化參數文件,添加隱含參數:

_corrupted_rollback_segments=(rbs1,rbs2,rbs4,rbs5,rbs6,rbs7,rbs8,rbs9,rbs10)

全部標志為corrupted的,然後啟動數據庫到mount狀態

drop掉file#=22的數據文件

然後recover database;alter database open;

數據庫打開以後,再次檢查v$rollname視圖,發現只有SYSTEM表空間中的回滾段存在了,OK,再去dba_rollback_segs視圖檢查狀態,發現除了SYSTEM回滾段其它的都處於need recover狀態,好,沒錯。開始刪除。

直接drop掉所有的回滾段,drop掉回滾段表空間,然後創建新的表空間,創建新的回滾段,將所有回滾段online,中間出了個小插曲,後面提到。

最後,正常關閉數據庫,修改init參數,將_corrupted_rollback_segments這行注釋掉,最後正常啟動數據庫。隨便找幾張表,作幾個insert測試了一下,沒有問題,OK,修復完成。

小插曲:創建新的回滾段時出了一個問題,耽誤了一段時間,因為是8i的庫,system表空間是DMT的,所以回滾段表空間也必須是DMT的,開始按照習慣創建了一個LMT的表空間,然後創建回滾段的時候總是報錯,說非系統回滾段無法使用SYSTEM表空間,想了好一陣,才想起DMT和LMT的這回事兒,然後drop掉新建的LMT表空間,創建了一個DMT的表空間,再重新創建回滾段,沒有問題了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved