Undo和Current Online Redo損壞的處理方法

keeptrying發表於2013-11-12

一、Undo損壞

1Undo的兩種管理方式

Oracle undo管理詳解:

http://space.itpub.net/25744374/viewspace-776025/

Oracle undo有兩種管理方式:automanual。通過引數undo_management來設定。

1)、MANUAL方式將undo資訊記錄到SYSTEM表空間下的SYSTEM segment

SQL> col segment_name format a10

SQL> select segment_name,tablespace_name,bytes,next_extent from dba_segments where segment_type='ROLLBACK';

SEGMENT_NA   TABLESPACE_NAME           BYTES    NEXT_EXTENT

---------- ------------------------------ ----------------

SYSTEM        SYSTEM                     393216     1048576

通過上面的查詢,可以看出這個system segmentsystem表空間,預設情況下,只有一個segment,而且比較小,所以如果使用system segment來儲存undo資訊,會影響資料庫的效能。所以Oracle推薦使用undo tablespace方式。

2)、AUTO方式使用undo tablespace儲存undo資訊。

使用Undo tablespace儲存,會有多個undo segment,並且由於是在undo表空間,而不是system表空間,所以對資料庫效能會有所提高。

SQL> select segment_name,tablespace_name,bytes,next_extent from dba_segments where segment_type='TYPE2 UNDO';

SEGMENT_NA    TABLESPACE_NAME         BYTES     NEXT_EXTENT

---------- ------------------------------ ---------- -----

_SYSSMU1$      UNDOTBS1                2228224       65536

_SYSSMU2$      UNDOTBS1                1179648       65536

_SYSSMU3$      UNDOTBS1                1179648       65536

_SYSSMU4$      UNDOTBS1                1179648       65536

_SYSSMU5$      UNDOTBS1                1179648       65536

_SYSSMU6$      UNDOTBS1                1179648       65536

_SYSSMU7$      UNDOTBS1                1179648       65536

_SYSSMU8$      UNDOTBS1                2228224       65536

_SYSSMU9$      UNDOTBS1                2228224       65536

_SYSSMU10$     UNDOTBS1                3276800       65536

已選擇10行。

通過上面的查詢,可以看出,有10undo segment來儲存undo資訊。

也可以通過v$rollnamev$rollstat檢視來檢視這些資訊:

l   v$rollnameList the names of all online rollback segments.

l   v$rollstatContains rollback segment statistics.

2Undo損壞的處理

Undo損壞大多數是因為異常當機,在啟動的時候報錯,DB不能啟動,比如:

ORA-00600: internal error code, arguments: [4194]

對於Undo損壞的情況,能用備份恢復最好,如果不能,就只能通過一些特殊的方法來恢復。

方法一:使用system segment

步驟:

1)、spfile建立pfile,然後修改引數:

#*.undo_tablespace='UNDOTBS1'

#*.undo_management='AUTO'

#*.undo_tablespace

#*.undo_retention

undo_management='MANUAL'

rollback_segments='SYSTEM'

2)、用修改之後的pfile啟動DB

SQL> startup mount pfile=’E:\initsorcl.ora’;

3)、刪除原來的表空間,建立新的undo表空間

SQL> drop tablespace undotbs1;

SQL> create undo tablespace undotbs1 datafile ‘E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATAFILE\undotbs1.dbf’ size 10M;

4)、關閉資料庫,修改pfile引數,然後用新的pfile建立spfile,再正常啟動資料庫:

*.undo_tablespace='UNDOTBS1'

*.undo_management='AUTO'

#undo_management='MANUAL'

#rollback_segments='SYSTEM'

=================================================

方法二:跳過損壞的 segment

因為undo segment有多個,可以通過檢視alert log來判斷是哪些段損毀了,只需要把這些損壞的segment跳過,先正常啟動DB,再建立新的undo表空間,再切換一下。

步驟:

1)、用spfile建立pfile,然後新增引數:

*._corrupted_rollback_segments=’ _SYSSMU11$’,’ _SYSSMU11$’,’ _SYSSMU11$’

這些欄位的值可以通過alert log檢視。

2)、用修改之後的pfile啟動DB

SQL> startup mount pfile=’E:\initsorcl.ora’;

因為跳過了那些損壞的segment,所以DB可以正常啟動。

3)、建立新的undo表空間,並切換過來

SQL> create undo tablespace undotbs2 datafile ‘E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATAFILE\UNDOTBS2.DBF’ size 10M;

SQL> alter system set undo_tablespace=undotbs2;

SQL> drop tablespace undotbs1;

4)、修改pfile,建立spfile,並正常啟動

刪除:

*._corrupted_rollback_segments=’ _SYSSMU11$’,’ _SYSSMU11$’,’ _SYSSMU11$’

=================================================

二、Current Online Redo損壞

1、如果有歸檔和備份,可以用不完全恢復

SQL> startup mount;

SQL> recover database until cancle;

SQL> alter database open resetlogs;

2、強制恢復,這種方法可能會導致資料不一致

SQL> startup mount;

SQL> alter system set “_allow_resetlogs_corruption”=true scope=spfile;

SQL> recover database until cancel;

SQL> alter database open resetlogs;

這種情況下,可能會報ORA-600[2662]SCN有關)和 ORA-600[4000](回滾段有關)的錯誤。

使用_allow_resetlogs_corruption引數,強制的開啟資料庫,可能會導致邏輯的壞塊,從而影響資料字典。 所以,即使使用該引數正常開啟後,也需要做的一個操作:邏輯匯出資料。 重建例項,匯入例項。 消除邏輯壞塊的可能性。

如果使用_allow_resetlogs_corruption引數啟動報了undo segment的錯誤而無法啟動,處理方法參考第一節中undo 的處理情況。 只要DB 能正常open,就匯出資料,重建例項,在匯入。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25744374/viewspace-776419/,如需轉載,請註明出處,否則將追究法律責任。

相關文章