這兩種情況都能夠視為一種情況處理,解決方法一樣。
場景:在23:10的時候新建一個undo表空間undotbs02,並切換至該undo表空間。

因為閃回數據庫時使用的是undotbs02,而23:10時使用的是undotbs01,
會造成undo表空間缺失。無法打開數據庫。
(注:閃回數據庫之后須要resetlogs)


從上面的錯誤就能夠看出來。此時undotbs02不存在,無法打開數據庫。
解決思路非常easy:新建一個undo表空間。然后將undo_tablespace 指向新的undo表空間。
可是....新建表空間僅僅能在數據庫open狀態下才干進行。
所以:
由於Oracle system 表空間還有回滾段。因此我們先能夠讓Oracle使用system表空間回滾段
打開數據庫,然后就能夠新建表空間了。


新建表空間:

啟動數據庫。
這時能夠新建一個undo表空間。然后將undo_tablespace參數指向過去
注:一定要把undo_management 參數改動為AUTO


通過以上步驟就能夠完畢undo表空間損壞或缺失導致的數據庫無法打開問題。
總結:
須要注意的問題:
1. 在閃回數據庫之后。打開數據庫時須要使用 alter database open resetlogs; 命令重置重置日志
2. 要閃回數據庫,數據庫要裝載但不能打開(mount狀態下閃回數據庫)
3. 記得將undo_management 參數改動回來。
使用:alter system set undo_management=auto scope=spfile;
以下是利用system表空間回滾段新建undo表空間的步驟:
1. 將數據庫啟動到mount
2. alter system set undo_management=manual scope=spfile; -- 設置undo表空間的管理方式
3. shutdown immediate;
4. startup 然后新建一個undo表空間 undotbs03;
5. 改動undo_tablespace 參數指向新建的undo表空間 undotbs03;
** 6. 記得將undo_management 參數改動回來。
alter system set undo_management=auto scope=spfile;
7. SQL> alter system set undo_management=manual scope=spfile;
auto表示:該表空間是由Oracle來管理的(自己主動分配給不同事物使用)
manual表示:該表空間的block是通過freelist來管理怎樣存儲數據的。
8. 打開數據庫
** 9. 打開數據庫后一定要把undo_management 參數改動回來。
alter system set undo_management=auto scope=spfile;