如果Oracle在運行中很不幸遇到undo損壞
實驗如下
Step
如果undo數據文件損壞
ORA
ORA
說明該undo文件已經損壞或丟失
SQL> alter database datafile
SQL> alter database open;
打開數據庫的目的是為了找出受影響的回滾段
SQL> select segment_name
SEGMENT_NAME STATUS
SYSTEM ONLINE
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
SQL> show parameter undo
NAME TYPE VALUE
undo_management string AUTO
undo_retention integer
undo_tablespace string undo
關閉數據庫
SQL> shutdown immediate;
Step
創建一個臨時的pfile
SQL> create pfile=
修改pfile如下
*
*
*
並以改pfile重新啟動數據庫
SQL> startup pfile=
Step
手動刪除受影響的回滾段
SQL>drop rollback segment "_SYSSMU
SQL>drop rollback segment "_SYSSMU
SQL>drop rollback segment "_SYSSMU
SQL>drop rollback segment "_SYSSMU
SQL>drop rollback segment "_SYSSMU
SQL>drop rollback segment "_SYSSMU
SQL>drop rollback segment "_SYSSMU
SQL>drop rollback segment "_SYSSMU
SQL>drop rollback segment "_SYSSMU
SQL>drop rollback segment "_SYSSMU
手動刪除舊的undo表空間
SQL> drop tablespace undo
重建新的undo表空間
SQL> create undo tablespace undo
創建新的spfile
SQL> create spfile from pfile=
關閉數據庫
SQL> shutdown immediate;
Step
以原來的spfile啟動數據庫
SQL> startup;
還原undo表空間管理為自動
SQL> alter system set undo_management=
取消隱藏參數的設置
SQL> alter system reset "_offline_rollback_segments" scope=spfile;
重啟使其生效
SQL> shutdown immediate;
SQL> startup
SQL> show parameter undo
NAME TYPE VALUE
undo_management string AUTO
undo_retention integer
undo_tablespace string undo
最終檢查一下
SQL> select segment_name
SEGMENT_NAME STATUS
SYSTEM ONLINE
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
From:http://tw.wingwit.com/Article/program/Oracle/201311/19061.html