undo有問題或毀損,無法Drop


在一次要縮小undo的空間時,用Oracle Enterprise Manager來offline Undo File,結果出現錯誤,因為有segments仍在使用中。
但是忘了做了什麼動作,以致它最後還是將undo file離線,並且在後續操作中出現了undo file需要做recovery的訊息。

ORA-01157: cannot identify/lock data file 13 - see DBWR trace file
ORA-01110: data file 13: '/testdb/oradata/undo01.dbf'

先找出有哪些segment還在使用。
SQL> select tablespace_name,segment_name,status from dba_rollback_segs where status='NEEDS RECOVERY';
TABLESPACE_NAME             SEGMENT_NAME                STATUS
------------------------------ ------------------------------ ----------------
APPS_UNDOTS1                 _SYSSMU1$                NEEDS RECOVERY
APPS_UNDOTS1                 _SYSSMU2$                NEEDS RECOVERY
APPS_UNDOTS1                 _SYSSMU3$                NEEDS RECOVERY
APPS_UNDOTS1                 _SYSSMU4$                NEEDS RECOVERY

將資料庫關閉,備份init.ora,編輯init.ora,修改兩個參數值如下:
undo_management='MANUAL'
rollback_segments='SYSTEM'

在init.ora加上一個隱藏的參數,值為SQL找到的SEGMENT_NAME,收回segment如下:
*._offline_rollback_segments='_SYSSMU1$','_SYSSMU2$','_SYSSMU3$','_SYSSMU4$'

用pfile來開啟資料庫:
SQL> startup  pfile=/testdb/db/9.2.0/dbs/init.ora ;

資料庫成功開啟之後,就可以新增新的Undo Tablespace:
SQL> create undo tablespace APPS_UNDOTS2 datafile '/testdb/oradata/UNDOTBS01.DBF' size 10000m;

刪除舊的Undo Tablespace;
DROP TABLESPACE APPS_UNDOTS1 INCLUDING CONTENTS  AND DATAFILES CASCADE CONSTRAINTS ;

關閉資料庫,將備份的init.ora還原,並且修改init.ora
將undo_tablespace=APPS_UNDOTS1改為APPS_UNDOTS2

重新開啟資料庫,ok

修改 Ubuntu 20.04 系統時區