undo表空間損壞的處理過程
erpaa資料庫,因為儲存原因當機,undo表空間損壞的處理過程
資料庫在開啟rman備份時,突然出現掛載磁碟無法識別情況,導至資料庫當機。
處理過程如下:
--檢查資料庫狀態
C:\Documents and Settings\Administrator>sqlplus "/as sysdba"
SQL*Plus: Release 9.2.0.1.0 - Production on 星期日 8月 19 11:49:13 2013
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
已連線到空閒例程。
SQL> startup
ORA-00376: 此時無法讀取檔案 18
ORA-01110: 資料檔案 18: 'Y:\ORADATA\UNDO\UNDO02.DBF'
資料庫啟動報錯,指出undo空間錯誤!經過分析,需要對undo空間進行重建
--備份引數檔案,準備修改引數啟動資料庫,檢視其它檔案的狀態。
SQL> create pfile='c:\pfilebak0819.ora' from spfile;
嘗試啟動到mount狀態:
SQL> startup mount;
這時資料庫顯示啟動到了mount狀態,查詢一下資料庫檔案情況:
SQL> select name,status from v$datafile;
NAME STATUS
---------------------------------------- -------
E:\ORACLE\ORADATA\erpaa\SYSTEM01.DBF SYSTEM
E:\ORACLE\ORADATA\erpaa\UNDOTBS01.DBF ONLINE
E:\ORACLE\ORADATA\erpaa\USERS01.DBF ONLINE
E:\ORACLE\ORADATA\erpaa\XDB01.DBF ONLINE
E:\ORACLE\ORADATA\erpaa\USER.ORA ONLINE
Z:\ORADATA\USER\USER004.DBF ONLINE
Y:\ORADATA\UNDO\UNDO02.DBF RECOVER
Y:\ORADATA\UNDO\UNDO03.DBF RECOVER
這裡發現undo空間需要恢復,所以先恢復一下資料庫,看能否恢復!
SQL> recover database;
Database recovered.
再次檢視的時候,仍然處理需要恢復的狀態。
--修改剛才備份的引數檔案pfile,資料庫啟動到不一致的狀態,新增undo表空間,並刪除原undo表空間
加上如下兩個引數:
*._allow_resetlogs_corruption=true
*._corrupted_rollback_segments=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)
儲存後用pfile啟動
SQL> startup pfile='c:\pfilebak0819.ora';
啟動資料庫後,重新建立undo表空間。
SQL> CREATE UNDO TABLESPACE "UNDOTBS2" DATAFILE 'E:\oracle\oradata\erpaa\undotbs02.dbf' SIZE 1024M REUSE AUTOEXTEND ON NEXT 2m MAXSIZE 4096M;
Tablespace created.
SQL> alter system set undo_tablespace=UNDOTBS2 scope=both;
System alerted.
SQL> drop tablespace UNDOTBS1 including contents and datafiles;
Tablespace droped.
再次查詢需要恢復的檔案,已經不存在了
SQL> select * from v$recover_file;
no rows selected
--再次關閉資料庫,並重啟,發現報錯。
SQL> shutdown immediate
把原來的引數進行修改,去掉隱含引數,再次啟動
SQL> startup pfile='c:\pfilebak0819.ora';
Errors in file e:\oracle\admin\erpaa\udump\erpaa_ora_1504.trc:
ORA-00600: 內部錯誤程式碼,引數: [25012], [1], [2], [], [], [], [], []
資料庫又報錯了,不過從這個錯誤引數來看,資料庫仍然需要undotsb1的檔案,所以把第一個undo建好,但不使用!
再次增加剛才的隱含引數進去,再不一致的情況下啟動。
SQL> startup pfile='c:\pfilebak0819.ora';
資料庫啟動後,重建undo1
SQL> CREATE UNDO TABLESPACE "UNDOTBS1" DATAFILE 'E:\oracle\oradata\erpaa\undotbs01.dbf' SIZE 100m;
Tablespace created.
SQL> shutdown immediate;
關閉資料庫後,重新修改引數pfile檔案,
SQL> startup pfile='c:\pfilebak0819.ora';
資料庫啟動後,做了幾次日誌切換都沒有出現任何問題
SQL> alter system archive log current.
System alerted.
SQL> create spfile from pfile='c:\pfilebak0819.ora';
--但是,半個小時後,發現資料庫突然宕了,報錯如下:
BH (0x1DFE204C) file#: 2 rdba: 0x00800029 (2/41) class 21 ba: 0x1DABA000
set: 5 dbwrid: 0 obj: -1 objn: 0
hash: [1e7ffce8,1a7a994c] lru: [1dfe220c,1dfe1f1c]
ckptq: [NULL] fileq: [NULL]
st: XCURRENT md: NULL rsop: 0x00000000 tch: 3
flags: gotten_in_current_mode
LRBA: [0x0.0.0] HSCN: [0xffff.ffffffff] HSUB: [255] RRBA: [0x0.0.0]
*** 2013-08-19 14:10:17.000
ksedmp: internal or fatal error
ORA-00600: internal error code, arguments: [kcbgcur_6], [23], [], [], [], [], [], []
發現2號檔案還有問題,進行如下檢查:
SQL> startup
資料庫能夠正常啟動,檢查檔案和回滾段。
SQL> select file_name,tablespace_name from dba_data_files where file# = 2
這時查詢發現2號檔案正是undotbs1的表空間檔案
SQL> select segment_name,status,tablespace_name from dba_rollback_segs
發現有11個undo段是undotsb1的,並且是offline狀態的,如下:
'_SYSSMU11$','_SYSSMU10$','_SYSSMU9$','_SYSSMU8$','_SYSSMU7$','_SYSSMU6$','_SYSSMU5$','_SYSSMU4$','_SYSSMU3$','_SYSSMU2$','_SYSSMU1$'
SQL> shutdown immediate
關閉資料庫,修改引數檔案pfile,做如下調整:
*._corrupted_rollback_segments=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$,_SYSSMU11$)
undo_management=manual
SQL> startup pfile='c:\pfilebak0819.ora';
資料庫啟動後,這時候,需要把這些回滾段應該是原來undotbs1的,應該把它drop掉
SQL> drop rollback segment "_SYSSMU11$";
Rollback segment dropped
SQL> drop rollback segment "_SYSSMU10$";
Rollback segment dropped
SQL> drop rollback segment "_SYSSMU9$";
Rollback segment dropped
SQL> drop rollback segment "_SYSSMU8$";
Rollback segment dropped
SQL> drop rollback segment "_SYSSMU7$";
Rollback segment dropped
SQL> drop rollback segment "_SYSSMU6$";
Rollback segment dropped
SQL> drop rollback segment "_SYSSMU5$";
Rollback segment dropped
SQL> drop rollback segment "_SYSSMU4$";
Rollback segment dropped
SQL> drop rollback segment "_SYSSMU3$";
Rollback segment dropped
SQL> drop rollback segment "_SYSSMU2$";
Rollback segment dropped
SQL> drop rollback segment "_SYSSMU1$";
Rollback segment dropped
再次關閉和開啟資料庫
SQL> shutdown immediate;
修改pfile
*._corrupted_rollback_segments=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$,_SYSSMU11$)
undo_management=manual
把第一條刪除,第二條改成AUTO
重新利用這個pfile開啟資料庫
SQL> startup pfile='c:\pfilebak0819.ora';
資料庫啟動後
SQL> create spfile from pfile='c:\pfilebak0819.ora';
至此,資料庫恢復正常!
資料庫在開啟rman備份時,突然出現掛載磁碟無法識別情況,導至資料庫當機。
處理過程如下:
--檢查資料庫狀態
C:\Documents and Settings\Administrator>sqlplus "/as sysdba"
SQL*Plus: Release 9.2.0.1.0 - Production on 星期日 8月 19 11:49:13 2013
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
已連線到空閒例程。
SQL> startup
ORA-00376: 此時無法讀取檔案 18
ORA-01110: 資料檔案 18: 'Y:\ORADATA\UNDO\UNDO02.DBF'
資料庫啟動報錯,指出undo空間錯誤!經過分析,需要對undo空間進行重建
--備份引數檔案,準備修改引數啟動資料庫,檢視其它檔案的狀態。
SQL> create pfile='c:\pfilebak0819.ora' from spfile;
嘗試啟動到mount狀態:
SQL> startup mount;
這時資料庫顯示啟動到了mount狀態,查詢一下資料庫檔案情況:
SQL> select name,status from v$datafile;
NAME STATUS
---------------------------------------- -------
E:\ORACLE\ORADATA\erpaa\SYSTEM01.DBF SYSTEM
E:\ORACLE\ORADATA\erpaa\UNDOTBS01.DBF ONLINE
E:\ORACLE\ORADATA\erpaa\USERS01.DBF ONLINE
E:\ORACLE\ORADATA\erpaa\XDB01.DBF ONLINE
E:\ORACLE\ORADATA\erpaa\USER.ORA ONLINE
Z:\ORADATA\USER\USER004.DBF ONLINE
Y:\ORADATA\UNDO\UNDO02.DBF RECOVER
Y:\ORADATA\UNDO\UNDO03.DBF RECOVER
這裡發現undo空間需要恢復,所以先恢復一下資料庫,看能否恢復!
SQL> recover database;
Database recovered.
再次檢視的時候,仍然處理需要恢復的狀態。
--修改剛才備份的引數檔案pfile,資料庫啟動到不一致的狀態,新增undo表空間,並刪除原undo表空間
加上如下兩個引數:
*._allow_resetlogs_corruption=true
*._corrupted_rollback_segments=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)
儲存後用pfile啟動
SQL> startup pfile='c:\pfilebak0819.ora';
啟動資料庫後,重新建立undo表空間。
SQL> CREATE UNDO TABLESPACE "UNDOTBS2" DATAFILE 'E:\oracle\oradata\erpaa\undotbs02.dbf' SIZE 1024M REUSE AUTOEXTEND ON NEXT 2m MAXSIZE 4096M;
Tablespace created.
SQL> alter system set undo_tablespace=UNDOTBS2 scope=both;
System alerted.
SQL> drop tablespace UNDOTBS1 including contents and datafiles;
Tablespace droped.
再次查詢需要恢復的檔案,已經不存在了
SQL> select * from v$recover_file;
no rows selected
--再次關閉資料庫,並重啟,發現報錯。
SQL> shutdown immediate
把原來的引數進行修改,去掉隱含引數,再次啟動
SQL> startup pfile='c:\pfilebak0819.ora';
Errors in file e:\oracle\admin\erpaa\udump\erpaa_ora_1504.trc:
ORA-00600: 內部錯誤程式碼,引數: [25012], [1], [2], [], [], [], [], []
資料庫又報錯了,不過從這個錯誤引數來看,資料庫仍然需要undotsb1的檔案,所以把第一個undo建好,但不使用!
再次增加剛才的隱含引數進去,再不一致的情況下啟動。
SQL> startup pfile='c:\pfilebak0819.ora';
資料庫啟動後,重建undo1
SQL> CREATE UNDO TABLESPACE "UNDOTBS1" DATAFILE 'E:\oracle\oradata\erpaa\undotbs01.dbf' SIZE 100m;
Tablespace created.
SQL> shutdown immediate;
關閉資料庫後,重新修改引數pfile檔案,
SQL> startup pfile='c:\pfilebak0819.ora';
資料庫啟動後,做了幾次日誌切換都沒有出現任何問題
SQL> alter system archive log current.
System alerted.
SQL> create spfile from pfile='c:\pfilebak0819.ora';
--但是,半個小時後,發現資料庫突然宕了,報錯如下:
BH (0x1DFE204C) file#: 2 rdba: 0x00800029 (2/41) class 21 ba: 0x1DABA000
set: 5 dbwrid: 0 obj: -1 objn: 0
hash: [1e7ffce8,1a7a994c] lru: [1dfe220c,1dfe1f1c]
ckptq: [NULL] fileq: [NULL]
st: XCURRENT md: NULL rsop: 0x00000000 tch: 3
flags: gotten_in_current_mode
LRBA: [0x0.0.0] HSCN: [0xffff.ffffffff] HSUB: [255] RRBA: [0x0.0.0]
*** 2013-08-19 14:10:17.000
ksedmp: internal or fatal error
ORA-00600: internal error code, arguments: [kcbgcur_6], [23], [], [], [], [], [], []
發現2號檔案還有問題,進行如下檢查:
SQL> startup
資料庫能夠正常啟動,檢查檔案和回滾段。
SQL> select file_name,tablespace_name from dba_data_files where file# = 2
這時查詢發現2號檔案正是undotbs1的表空間檔案
SQL> select segment_name,status,tablespace_name from dba_rollback_segs
發現有11個undo段是undotsb1的,並且是offline狀態的,如下:
'_SYSSMU11$','_SYSSMU10$','_SYSSMU9$','_SYSSMU8$','_SYSSMU7$','_SYSSMU6$','_SYSSMU5$','_SYSSMU4$','_SYSSMU3$','_SYSSMU2$','_SYSSMU1$'
SQL> shutdown immediate
關閉資料庫,修改引數檔案pfile,做如下調整:
*._corrupted_rollback_segments=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$,_SYSSMU11$)
undo_management=manual
SQL> startup pfile='c:\pfilebak0819.ora';
資料庫啟動後,這時候,需要把這些回滾段應該是原來undotbs1的,應該把它drop掉
SQL> drop rollback segment "_SYSSMU11$";
Rollback segment dropped
SQL> drop rollback segment "_SYSSMU10$";
Rollback segment dropped
SQL> drop rollback segment "_SYSSMU9$";
Rollback segment dropped
SQL> drop rollback segment "_SYSSMU8$";
Rollback segment dropped
SQL> drop rollback segment "_SYSSMU7$";
Rollback segment dropped
SQL> drop rollback segment "_SYSSMU6$";
Rollback segment dropped
SQL> drop rollback segment "_SYSSMU5$";
Rollback segment dropped
SQL> drop rollback segment "_SYSSMU4$";
Rollback segment dropped
SQL> drop rollback segment "_SYSSMU3$";
Rollback segment dropped
SQL> drop rollback segment "_SYSSMU2$";
Rollback segment dropped
SQL> drop rollback segment "_SYSSMU1$";
Rollback segment dropped
再次關閉和開啟資料庫
SQL> shutdown immediate;
修改pfile
*._corrupted_rollback_segments=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$,_SYSSMU11$)
undo_management=manual
把第一條刪除,第二條改成AUTO
重新利用這個pfile開啟資料庫
SQL> startup pfile='c:\pfilebak0819.ora';
資料庫啟動後
SQL> create spfile from pfile='c:\pfilebak0819.ora';
至此,資料庫恢復正常!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29371470/viewspace-1062586/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- UNDO表空間損壞的處理
- UNDO 表空間檔案損壞的恢復
- sysaux表空間檔案損壞的處理(zt)UX
- undo表空間故障處理
- ORACLE-00600 4194 斷電undo損壞處理過程Oracle
- undo 表空間滿了的處理方法
- 回滾段表空間損壞處理(ORA-01552)處理方法
- UNDO表空間損壞導致資料庫無法OPEN資料庫
- undo表空間佔用磁碟空間滿案例處理
- Oracle undo表空間爆滿的處理方法Oracle
- 系統表空間IO錯誤 資料損壞處理一則
- MySQL資料庫INNODB表損壞修復處理過程分享MySql資料庫
- MySQL 磁碟空間滿導致表空間相關資料檔案損壞故障處理MySql
- oracle中undo表空間丟失處理方法Oracle
- 【UNDO】使用重建UNDO表空間方法解決UNDO表空間過大問題
- Oracle一次縮小表空間的處理過程Oracle
- Undo和Current Online Redo損壞的處理方法
- Current online Redo 和 Undo 損壞的處理方法
- 沒有備份的情況下處理undo損壞
- 【Oracle】Current online Redo 和 Undo 損壞的處理方法Oracle
- 記一次ORACLE的UNDO表空間爆滿分析過程Oracle
- UNDO表空間損壞,爆滿,ORA-600[4194]/[4193]錯誤解決
- oracle10g rac 表決盤損壞、ocr損壞處理Oracle
- 自動undo表空間模式下切換新的undo表空間模式
- system表空間檔案損壞----完全恢復
- 處理塊損壞
- oracle undo 表空間Oracle
- 理解UNDO表空間
- Oracle 無備份情況下undo檔案損壞處理Oracle
- undo表空間出現問題的幾種情況與處理
- Oracle 釋放過度使用的Undo表空間Oracle
- ORACLE 回滾段表空間資料檔案丟失或損壞處理方法(1) (轉)Oracle
- oracle臨時表空間過大的原因&&處理Oracle
- 段頭損壞的處理
- undo 檔案損壞
- oracle UNDO表空間一個bug——undo表空間快速擴充套件Oracle套件
- Oracle undo 表空間管理Oracle
- oracle重建UNDO表空間Oracle