Undo和Current Online Redo損壞的處理方法
Oracle undo管理詳解:
http://space.itpub.net/25744374/viewspace-776025/
Oracle undo有兩種管理方式:auto和manual。通過引數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 segment在system表空間,預設情況下,只有一個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行。
通過上面的查詢,可以看出,有10個undo segment來儲存undo資訊。
也可以通過v$rollname和v$rollstat檢視來檢視這些資訊:
l v$rollname:List the names of all online rollback segments.
l v$rollstat:Contains rollback segment statistics.
2、Undo損壞的處理
Undo損壞大多數是因為異常當機,在啟動的時候報錯,DB不能啟動,比如:
ORA-00600: internal error code, arguments: [4194]
對於Undo損壞的情況,能用備份恢復最好,如果不能,就只能通過一些特殊的方法來恢復。
步驟:
#*.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’;
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Current online Redo 和 Undo 損壞的處理方法
- 【Oracle】Current online Redo 和 Undo 損壞的處理方法Oracle
- Online Redo Log損壞處理實驗(上)
- Online Redo Log損壞處理實驗(中)
- Online Redo Log損壞處理實驗(下)
- oracle - redo 損壞或刪除處理方法Oracle
- oracle redo各種狀態(inactive、active、current)損壞的處理方式Oracle Redo
- UNDO表空間損壞的處理
- undo表空間損壞的處理過程
- 沒有備份的情況下處理undo損壞
- Oracle REDO損壞Oracle Redo
- 處理塊損壞
- Oracle 無備份情況下undo檔案損壞處理Oracle
- Redo Log File(inactive、active)損壞,處理恢復對策
- 遇到了 客戶生產庫 current online logfile 損壞
- 段頭損壞的處理
- undo 檔案損壞
- redo日誌損壞
- ORACLE-00600 4194 斷電undo損壞處理過程Oracle
- oracle的redo和undoOracle
- 第7章 處理塊損壞
- oracle10g rac 表決盤損壞、ocr損壞處理Oracle
- redo和undo的區別
- 回滾段表空間損壞處理(ORA-01552)處理方法
- SQL Server 2005日誌檔案損壞的處理方法SQLServer
- undo檔案丟失或損壞
- RAC磁碟頭損壞問題處理
- Redo 和 Undo 概念解析
- undo log和redo log
- (轉)oracle redolog損壞的處理辦法Oracle Redo
- Oracle聯機日誌檔案丟失或損壞的處理方法Oracle
- windows10應用商店損壞怎麼修復_win10應用商店損壞處理方法WindowsWin10
- ORACLE資料庫壞塊的處理 (處理無物件壞快的方法)Oracle資料庫物件
- Oracle資料庫UNDO損壞後的恢復Oracle資料庫
- UNDO 表空間檔案損壞的恢復
- REDO檔案丟失或者損壞的恢復
- Oracle的redo 和undo的區別Oracle
- sysaux表空間檔案損壞的處理(zt)UX