Current online Redo 和 Undo 損壞的處理方法
Oracle 不同故障的恢復方案
http://space.itpub.net/15880878/viewspace-720082
Oracle undo 表空間管理
http://space.itpub.net/15880878/viewspace-720053
上面的2篇Blog 講到了Oracle 一些故障下的恢復方法,但是還有2點,之前沒有做詳述。即current online redo 損壞的情況和undo的損壞情況。 之所以把他們放一起講,是因為他們之間有聯絡。
在做操作之前,最好把控制檔案,redo log 和資料檔案做一個冷備份,以防萬一.
一. UNDO 的補充資訊
所以這裡補充說明一下。 在補充之前先講一下undo segment的概念。
在blog:Oracle undo 管理
http://space.itpub.net/15880878/viewspace-720053
中提到了Oracle 的undo 有兩種管理方式,通過引數undo_management來設定auto 和 manual。
1.1 當undo_management被設定成MENUAL時使用系統回滾段, 即將undo records 記錄到SYSTEM 表空間下的SYSTEM段。
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
通過上面的這條語句,我們查到了這個用於rollback 的system segment 存在與system 表空間。 預設情況下,只有一個segment,並且它還比較小,所以,如果使用system 段來儲存undo records。肯定會影響資料庫的效能。 所以Oracle 是建議使用Undo tablespace 來管理undo records。
1.2 當undo_management設定成AUTO時使用UNDO tablespace來管理回滾段。 這個時候,我們將有多個undo segment,並且這些segment 是存放在UNDO 表空間裡的。 這樣對DB的效能就會提高。
SQL> select segment_name,tablespace_name,bytes,next_extent from dba_segments where segment_type='TYPE2 UNDO';
SEGMENT_NAME TABLESPACE_NAME BYTES NEXT_EXTENT
-------------------- -------------------- ---------- -----------
_SYSSMU1$ UNDOTBS1 1179648 65536
_SYSSMU2$ UNDOTBS1 1179648 65536
_SYSSMU3$ UNDOTBS1 2228224 65536
_SYSSMU4$ UNDOTBS1 1179648 65536
_SYSSMU5$ UNDOTBS1 262144 65536
_SYSSMU6$ UNDOTBS1 1179648 65536
_SYSSMU7$ UNDOTBS1 1179648 65536
_SYSSMU8$ UNDOTBS1 1179648 65536
_SYSSMU9$ UNDOTBS1 1179648 65536
_SYSSMU10$ UNDOTBS1 1179648 65536
通過以上SQL的查詢結果,我們可以看出,有10個undo segment來存放undo records。
以上我們是通過dba_segment 表檢視的結果。 也可以通過v$rollstat和v$rollname 兩個檢視來檢視資訊。 這2個檢視會顯示所有rollback 段的資訊。 包括system段和undo段。
SQL> col name format a15
SQL> select s.usn,n.name,s.extents,s.hwmsize,s.status from v$rollstat s, v$rollname n where s.usn=n.usn;
USN NAME EXTENTS HWMSIZE STATUS
---------- --------------- ---------- ---------- ---------------
0 SYSTEM 6 385024 ONLINE
1 _SYSSMU1$ 3 7659520 ONLINE
2 _SYSSMU2$ 3 9691136 ONLINE
3 _SYSSMU3$ 4 7462912 ONLINE
4 _SYSSMU4$ 3 76668928 ONLINE
5 _SYSSMU5$ 4 8511488 ONLINE
6 _SYSSMU6$ 3 7462912 ONLINE
7 _SYSSMU7$ 3 33480704 ONLINE
8 _SYSSMU8$ 3 8577024 ONLINE
9 _SYSSMU9$ 3 7462912 ONLINE
10 _SYSSMU10$ 3 13754368 ONLINE
11 rows selected.
二. UNDO 損壞的情況
瞭解了第一部分的補充知識後,我們在來看一下undo 損壞的情況。 出現這種情況,大多數是因為異常當機,在啟動的時候報的錯誤。DB 不能啟動。
比如:ORA-00600: internal error code, arguments: [4194],
對於Undo 損壞的情況,能用備份恢復最好,如果不能,就只能通過一些特殊的方法來恢復。
2.1 方法一,使用system segment。
在Blog:
Oracle undo 表空間管理
http://blog.csdn.net/tianlesoftware/archive/2010/07/11/5689558.aspx
提到了一種方法,就是使用SYSTEM 的回滾段, 步驟如下:
(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='F:/initorcl.ora' ;
(3)刪除原來的表空間,建立新的UNDO 表空間
SQL> drop tablespace undotbs;
SQL> create undo tablespace undotbs1 datafile '/u01/oradata/undotbs1.dbf' size 10M;
(4)關閉資料庫,修改pfile引數,然後用新的pfile建立spfile,在正常啟動資料庫。
*.undo_tablespace='UNDOTBS1'
*.undo_management='AUTO'
#undo_management='MANUAL'
#rollback_segments='SYSTEM'
2.2. 方法二:跳過損壞的segment
在方法一里面,我們使用了system segment。 通過第一部分我們瞭解到,undo segment 有多個,我們可以通過alert log 來檢視正在使用的是哪些segment,這些段有可能損壞了。 我們只需要把這些損壞的segment 跳過,先正常啟動DB,在建立新的UNDO 表空間,在切換一下。
(1)修改pfile,新增引數:
*._corrupted_rollback_segments='_SYSSMU11$','_SYSSMU12$','_SYSSMU13$'
這些欄位的值,我們通過alert log 檢視。 也可以通過如下命令檢視:
#strings system01.dbf | grep _SYSSMU | cut -d $ -f 1 | sort -u
(2)用修改之後的pfile啟動DB
因為跳過了哪些損壞的segment,所以DB 可以正常啟動。
(3)建立新的UNDO 表空間,並切換過來
SQL> create undo tablespace undotbs1 datafile '/u01/oradata/undotbs1.dbf' size 10M;
SQL> alter system set undo_tablespace=undotbs1;
SQL> drop tablespace undotbs;
(4)修改pfile,建立spfile,並正常啟動
刪除:
*._corrupted_rollback_segments='_SYSSMU11$','_SYSSMU12$','_SYSSMU13$'
以上就是UNDO 出現故障的2種處理方法。
三. Current online Redo 損毀的處理
其實在之前的不同故障處理的那篇blog裡已經提到了這點。 但這種情況是一種特殊的情況。 所以還是單獨拿出來說明一下。
current online log 損壞有兩種恢復方法:
(1)如果有歸檔和備份,可以用不完全恢復。
SQL>startup mount;
SQL>recover database until cancel; 先選擇auto,儘量恢復可以利用的歸檔日誌,然後重新執行:
SQL>recover database until cancel; 這次輸入cancel,完成不完全恢復,
用resetlogs開啟資料:
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;
這裡主要看2點:
(1)使用了_allow_resetlogs_corruption 引數
(2)這種情況下,可能會報ORA-600[2662](SCN有關)和 ORA-600[4000](回滾段有關)的錯誤。
使用_allow_resetlogs_corruption引數,強制的開啟資料庫,可能會導致邏輯的壞塊,從而影響資料字典。 所以,即使使用該引數正常開啟後,也需要做的一個操作:邏輯匯出資料。 重建例項,匯入例項。 消除邏輯壞塊的可能性。
如果使用_allow_resetlogs_corruption引數啟動報了undo segment的錯誤而無法啟動,處理方法參考第二節中undo 的處理情況。 只要DB 能正常open,就匯出資料,重建例項,在匯入。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15880878/viewspace-720083/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle redo各種狀態(inactive、active、current)損壞的處理方式Oracle Redo
- Oracle 無備份情況下undo檔案損壞處理Oracle
- oracle的redo和undoOracle
- 控制檔案損壞處理
- undo log和redo log
- SQLServer的檢查點、redo和undoSQLServer
- MySQL中的redo log和undo logMySql
- RAC磁碟頭損壞問題處理
- Oracle Redo and UndoOracle Redo
- 一次ORACLE資料庫undo壞塊處理Oracle資料庫
- 【REDO】Oracle redo undo 學習Oracle Redo
- windows10應用商店損壞怎麼修復_win10應用商店損壞處理方法WindowsWin10
- MySQL Undo Log和Redo Log介紹MySql
- redo損壞修復啟動資料庫辦法資料庫
- oracle中undo表空間丟失處理方法Oracle
- win10ie核心損壞怎麼修復_win10電腦ie顯示核心丟失或損壞處理方法Win10
- WPS文件損壞如何修復?WPS文件損壞的修復方法
- 深入理解MYSQL undo redoMySql
- Sqlserver沒有單獨的undo檔案,使用tempdb和redo log來存放undo資料SQLServer
- MySQL redo與undo日誌解析MySql
- Mac應用程式無法開啟提示不明開發者或檔案損壞的處理方法Mac
- 基於Redo Log和Undo Log的MySQL崩潰恢復流程MySql
- 深入理解MySQL系列之redo log、undo log和binlogMySql
- Oracle recover current redo ORA-00600:[4193] (oracle 故障恢復current redo日誌ORA-00600:[4193]報錯)Oracle
- Win10開機提示radeoninstaller.exe損壞的映像怎麼處理Win10
- MySQL資料庫INNODB表損壞修復處理過程分享MySql資料庫
- 淺析MySQL事務中的redo與undoMySql
- Oracle壞塊處理Oracle
- redis的好處和壞處Redis
- 磁頭損壞的修復方法有哪些
- 必須瞭解的mysql三大日誌-binlog、redo log和undo logMySql
- Ceph 磁碟損壞現象和解決方法
- InterBase資料庫檔案損壞的修復方法資料庫
- u盤檔案損壞怎麼恢復資料 u盤恢復損壞資料的有效方法
- 電腦硬碟分割槽表損壞怎麼修復?電腦硬碟分割槽表損壞的修復方法硬碟
- Win7系統ISP損壞怎麼辦?Win7系統中lsp損壞的修復方法Win7
- Win7系統LSP損壞怎麼辦?Win7系統中LSP損壞的修復方法Win7
- 【Mysql】三大日誌 redo log、bin log、undo logMySql
- 處理VM的一種特殊方法和思路