UNDO表空間的ORA-1122錯誤解決(三)

yangtingkun發表於2008-03-01

前一段時間解決了一個ORA-1122錯誤,正好本機的資料庫環境由於Windows的自動重起,導致資料庫無法開啟,出現錯誤資訊也是ORA-1122

這次出現錯誤的表空間是UNDO表空間。

上一篇介紹了利用備份進行恢復的方法,這篇嘗試重建UNDO表空間的方法。

UNDO表空間的ORA-1122錯誤解決(一):http://yangtingkun.itpub.net/post/468/455691

UNDO表空間的ORA-1122錯誤解決(二):http://yangtingkun.itpub.net/post/468/455743

 

 

上一篇文章中嘗試使用隱含引數_offline_rollback_segments來開啟資料庫,這裡還可以選擇將UNDO表空間的資料檔案直接刪除,然後使用_corrupted_rollback_segments引數來開啟資料庫,整個過程於上一篇介紹的方法類似。

SQL> STARTUP MOUNT
ORACLE
例程已經啟動。

Total System Global Area   76619308 bytes
Fixed Size                   454188 bytes
Variable Size              50331648 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
資料庫裝載完畢。
SQL> ALTER DATABASE OPEN;
ALTER DATABASE OPEN
*
ERROR
位於第 1 :
ORA-01122:
資料庫檔案 2 驗證失敗

ORA-01110:
資料檔案 2: 'F:\ORACLE\ORADATA\TEST\UNDOTBS01.DBF'
ORA-01200: 25600
的實際檔案大小小於26880塊的正確大小

下面嘗試使用_corrupted_rollback_segments開啟資料庫,使用_offline_rollback_segments引數時,Oracle還會嘗試進行資料塊的延遲清除,而對於_corrupted_rollback_segments來說,Oracle假設事務已經回滾,而不會進行其他的檢查。一般UNDO表空間丟失或損害的時候可以嘗試使用這個隱含引數:

SQL> ALTER DATABASE DATAFILE 'F:\ORACLE\ORADATA\TEST\UNDOTBS01.DBF' OFFLINE DROP;

資料庫已更改。

下面建立初始化引數PFILE

SQL> SHUTDOWN IMMEDIATE
ORA-01109:
資料庫未開啟


已經解除安裝資料庫。
ORACLE
例程已經關閉。
SQL> CREATE PFILE='F:\INITTEST.ORA' FROM SPFILE;

檔案已建立。

手工新增下面的初始化引數:

*.undo_management='MANUAL'
_corrupted_rollback_segments=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)

可以透過上一篇文章中給出的方法開啟資料庫查詢DBA_ROLLBACK_SEGS檢視來獲取回滾段列表。

對於沒有啟動的資料庫,可以透過linux作業系統命令stringssystem表空間的資料檔案中獲取回滾段資訊。

對於windows環境下的Oracle,可以將資料檔案透過ftp,複製到linux系統中,然後執行strings命令:

strings system01.dbf | grep _SYSSMU

下面利用修改後的PFILE開啟資料庫:

SQL> STARTUP PFILE=F:\INITTEST.ORA
ORACLE
例程已經啟動。

Total System Global Area   76619308 bytes
Fixed Size                   454188 bytes
Variable Size              50331648 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
資料庫裝載完畢。
資料庫已經開啟。

下面的處理方法就和上一篇文章中介紹的比較類似了,先刪除回滾段,然後刪除回滾表空間,然後建立新的UNDO表空間:

SQL> SELECT SEGMENT_NAME, OWNER, TABLESPACE_NAME, STATUS
  2  FROM DBA_ROLLBACK_SEGS;

SEGMENT_NAME    OWNER  TABLESPACE_NAME      STATUS
--------------- ------ -------------------- ----------------
SYSTEM          SYS    SYSTEM               ONLINE
_SYSSMU1$       PUBLIC UNDOTBS1             NEEDS RECOVERY
_SYSSMU2$       PUBLIC UNDOTBS1             NEEDS RECOVERY
_SYSSMU3$       PUBLIC UNDOTBS1             NEEDS RECOVERY
_SYSSMU4$       PUBLIC UNDOTBS1             NEEDS RECOVERY
_SYSSMU5$       PUBLIC UNDOTBS1             NEEDS RECOVERY
_SYSSMU6$       PUBLIC UNDOTBS1             NEEDS RECOVERY
_SYSSMU7$       PUBLIC UNDOTBS1             NEEDS RECOVERY
_SYSSMU8$       PUBLIC UNDOTBS1             NEEDS RECOVERY
_SYSSMU9$       PUBLIC UNDOTBS1             NEEDS RECOVERY
_SYSSMU10$      PUBLIC UNDOTBS1             NEEDS RECOVERY

已選擇11行。

SQL> DROP ROLLBACK SEGMENT "_SYSSMU1$";

回退段已刪除。

SQL> DROP ROLLBACK SEGMENT "_SYSSMU2$";

回退段已刪除。

SQL> DROP ROLLBACK SEGMENT "_SYSSMU3$";

回退段已刪除。

SQL> DROP ROLLBACK SEGMENT "_SYSSMU4$";

回退段已刪除。

SQL> DROP ROLLBACK SEGMENT "_SYSSMU5$";

回退段已刪除。

SQL> DROP ROLLBACK SEGMENT "_SYSSMU6$";

回退段已刪除。

SQL> DROP ROLLBACK SEGMENT "_SYSSMU7$";

回退段已刪除。

SQL> DROP ROLLBACK SEGMENT "_SYSSMU8$";

回退段已刪除。

SQL> DROP ROLLBACK SEGMENT "_SYSSMU9$";

回退段已刪除。

SQL> DROP ROLLBACK SEGMENT "_SYSSMU10$";

回退段已刪除。

SQL> DROP TABLESPACE UNDOTBS1 INCLUDING CONTENTS AND DATAFILES;

表空間已丟棄。

SQL> CREATE UNDO TABLESPACE UNDOTBS1 DATAFILE 'F:\ORACLE\ORADATA\TEST\UNDOTBS1.DBF' SIZE 200M;

表空間已建立。

SQL> SELECT COUNT(*) FROM YANGTK.T;

  COUNT(*)
----------
   1273614

SQL> SHUTDOWN IMMEDIATE
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE
例程已經關閉。
SQL> STARTUP
ORACLE
例程已經啟動。

Total System Global Area   76619308 bytes
Fixed Size                   454188 bytes
Variable Size              50331648 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
資料庫裝載完畢。
資料庫已經開啟。

和上一篇文章中的方法一樣,Oracle將需要回滾的資料當作已經提交的資料,為了避免隨後出現不可預測的問題,在重起資料庫去掉隱藏引數後,應該匯出資料,並建立新庫,將源資料匯入。

 

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

相關文章