UNDO表空間損壞導致資料庫無法OPEN

Allen-Li發表於2014-11-01
在資料庫undo表空間檔案損壞,或者undo表空間檔案缺失的情況下,無法開啟資料庫。
這兩種情況都可以視為一種情況處理,解決方法一樣。

場景:在23:10的時候新建一個undo表空間undotbs02,並切換至該undo表空間。
             UNDO表空間損壞導致資料庫無法OPEN - AllenLi - Allen的部落格
            此時再閃回資料庫至23:10。
            由於閃回資料庫時使用的是undotbs02,而23:10時使用的是undotbs01,
            會造成undo表空間缺失,無法開啟資料庫。(注:閃回資料庫之後需要resetlogs)
            UNDO表空間損壞導致資料庫無法OPEN - AllenLi - Allen的部落格
            UNDO表空間損壞導致資料庫無法OPEN - AllenLi - Allen的部落格
            從上面的錯誤就可以看出來,此時undotbs02不存在,無法開啟資料庫。
            解決思路很簡單:新建一個undo表空間,然後將undo_tablespace 指向新的undo表空間。
            但是....新建表空間只能在資料庫open狀態下才能進行。
            所以:
            因為Oracle system 表空間還有回滾段,因此我們先可以讓Oracle使用system表空間回滾段
            開啟資料庫,然後就可以新建表空間了。
            UNDO表空間損壞導致資料庫無法OPEN - AllenLi - Allen的部落格
            UNDO表空間損壞導致資料庫無法OPEN - AllenLi - Allen的部落格
            新建表空間:
            UNDO表空間損壞導致資料庫無法OPEN - AllenLi - Allen的部落格
           啟動資料庫。
           這時可以新建一個undo表空間,然後將undo_tablespace引數指向過去
           注:一定要把undo_management 引數修改為AUTO
           UNDO表空間損壞導致資料庫無法OPEN - AllenLi - Allen的部落格
           UNDO表空間損壞導致資料庫無法OPEN - AllenLi - Allen的部落格
          通過以上步驟就可以完成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;

相關文章