UNDO表空間的ORA-1122錯誤解決(三)
前一段時間解決了一個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作業系統命令strings從system表空間的資料檔案中獲取回滾段資訊。
對於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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【UNDO】使用重建UNDO表空間方法解決UNDO表空間過大問題
- UNDO表空間不足解決方法
- undo表空間不能回收的解決方法
- Oracle undo表空間爆滿的解決Oracle
- UNDO表空間損壞,爆滿,ORA-600[4194]/[4193]錯誤解決
- ORACLE 中undo表空間爆滿的解決方法Oracle
- undo表空間資源緊張的解決方案
- 收縮表空間ORA-03297錯誤解決
- oracle之EXP匯出表空間錯誤解決Oracle
- undo表空間使用率過高解決
- 自動undo表空間模式下切換新的undo表空間模式
- oracle undo 表空間Oracle
- 理解UNDO表空間
- undo表空間太大解決辦法
- Oracle 10g UNDO表空間過大的解決方案Oracle 10g
- oracle UNDO表空間一個bug——undo表空間快速擴充套件Oracle套件
- Oracle undo 表空間管理Oracle
- oracle重建UNDO表空間Oracle
- oracle undo表空間管理Oracle
- undo表空間總結
- 轉貼:收縮oracle表空間時ora-03297錯誤的解決Oracle
- undo表空間中常用的操作
- MySQL InnoDB Undo表空間配置MySql
- undo表空間故障處理
- oracle的還原表空間UNDO寫滿磁碟空間,解決該問題的具體步驟Oracle
- 使用中undo表空間資料檔案被誤刪
- Oracle - 回滾表空間 Undo 的整理Oracle
- Oracle的UNDO表空間管理總結Oracle
- UNDO表空間損壞的處理
- 有關UNDO表空間的學習:
- expdp/impdp來解決exp/imp出現的錯誤並匯入指定表空間
- 錯誤新增表空間的資料檔案
- ORACLE線上切換undo表空間Oracle
- Oracle undo表空間切換(ZT)Oracle
- Undo表空間與redo日誌
- oracle回滾段 undo 表空間Oracle
- ORACLE撤銷表空間(Undo Tablespaces)Oracle
- 表空間滿的解決方法