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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle中undo表空間丟失處理方法Oracle
- MySQL資料庫INNODB表損壞修復處理過程分享MySql資料庫
- MySQL 磁碟空間滿導致表空間相關資料檔案損壞故障處理MySql
- 刪除UNDO表空間並處理ORA-01548問題
- undo表空間容量
- Oracle 無備份情況下undo檔案損壞處理Oracle
- 18_深入解析Oracle undo原理(2)_undo表空間使用率100%問題處理Oracle
- Innodb:Undo 表空間巨大
- 更改undo表空間大小
- UNDO表空間空間回收及切換
- undo表空間使用率過高解決
- MySQL InnoDB Undo表空間配置MySql
- oracle系統表空間過大問題處理Oracle
- 2.5.5 使用自動Undo管理: 建立 Undo 表空間
- 一次壞塊的處理過程(一)
- 一次壞塊的處理過程(二)
- 【UNDO】Oracle undo表空間使用率過高,因為一個查詢Oracle
- 控制檔案損壞處理
- ORACLE線上切換undo表空間Oracle
- sysaux 表空間爆滿處理方法UX
- 檢查及設定合理的undo表空間
- RAC磁碟頭損壞問題處理
- Oracle切換undo表空間操作步驟Oracle
- MySQL UNDO表空間獨立和截斷MySql
- [20210527]rman與undo表空間備份.txt
- SYSAUX表空間佔用過大情況下的處理(AWR資訊過多)UX
- 一次ORACLE資料庫undo壞塊處理Oracle資料庫
- undo表空間使用率100%的原因檢視
- oracle sysaux表空間滿了處理辦法OracleUX
- MySQL 5.7新特性之線上收縮undo表空間MySql
- Oracle 19c 線上縮減 UNDO 表空間 容量Oracle
- 關於丟失表空間資料檔案的處理方式
- oracle 普通表空間資料檔案壞塊Oracle
- 12C關於CDB、PDB 回滾undo表空間的總結
- Oracle排程作業引起的空間驟增問題處理記錄Oracle
- oracle redo各種狀態(inactive、active、current)損壞的處理方式Oracle Redo
- python中PCA的處理過程PythonPCA
- windows10應用商店損壞怎麼修復_win10應用商店損壞處理方法WindowsWin10
- 16、表空間 建立表空間