記一次異常斷電導致ora-600、ORA-25153的處理經過

朋友突然聯繫我說,他們項目的數據庫宕機起不來了,報錯全是600,請我幫他處理下,現在記錄處理過程如下:

首先看下報錯日誌:

alter database mount 
ORA-1100 signalled during: alter database mount ...
Fri Oct 25 08:53:37 2019
alter database open 
Beginning crash recovery of 1 threads
 parallel recovery started with 7 processes
Started redo scan
Completed redo scan
 read 258 KB redo, 35 data blocks need recovery
Errors in file c:\app\administrator\diag\rdbms\xdyy\xdyy\trace\xdyy_ora_3068.trc  (incident=19794):
ORA-00600: 內部錯誤代碼, 參數: [kcratr_nab_less_than_odr], [1], [4757], [69495], [69667], [], [], [], [], [], [], []
Incident details in: c:\app\administrator\diag\rdbms\xdyy\xdyy\incident\incdir_19794\xdyy_ora_3068_i19794.trc
Aborting crash recovery due to error 600
Errors in file c:\app\administrator\diag\rdbms\xdyy\xdyy\trace\xdyy_ora_3068.trc:
ORA-00600: 內部錯誤代碼, 參數: [kcratr_nab_less_than_odr], [1], [4757], [69495], [69667], [], [], [], [], [], [], []
Errors in file c:\app\administrator\diag\rdbms\xdyy\xdyy\trace\xdyy_ora_3068.trc:
ORA-00600: 內部錯誤代碼, 參數: [kcratr_nab_less_than_odr], [1], [4757], [69495], [69667], [], [], [], [], [], [], []
ORA-600 signalled during: alter database open ...
Fri Oct 25 08:53:39 2019
Trace dumping is performing id=[cdmp_20191025085339]
Fri Oct 25 08:53:40 2019
Sweep [inc][19794]: completed
Sweep [inc2][19794]: completed
Fri Oct 25 08:55:45 2019
alter database mount 
ORA-1100 signalled during: alter database mount ...
Fri Oct 25 08:57:02 2019
Shutting down instance (immediate)
Shutting down instance: further logons disabled
Stopping background process MMNL
Stopping background process MMON
License high water mark = 8
All dispatchers and shared servers shutdown
ALTER DATABASE CLOSE NORMAL
ORA-1109 signalled during: ALTER DATABASE CLOSE NORMAL...
ALTER DATABASE DISMOUNT
Completed: ALTER DATABASE DISMOUNT
ARCH: Archival disabled due to shutdown: 1089
Shutting down archive processes
Archiving is disabled
Archive process shutdown avoided: 0 active
ARCH: Archival disabled due to shutdown: 1089
Shutting down archive processes
Archiving is disabled
Archive process shutdown avoided: 0 active
Fri Oct 25 08:57:07 2019
Stopping background process VKTM: 
Fri Oct 25 08:57:09 2019
Instance shutdown complete

還有一段報錯:

Successful open of redo thread 1
MTTR advisory is disabled because FAST_START_MTTR_TARGET is not set
SMON: enabling cache recovery
Successfully onlined Undo Tablespace 2.
Dictionary check beginning
Dictionary check complete
Verifying file header compatibility for 11g tablespace encryption..
Verifying 11g file header compatibility for tablespace encryption completed
SMON: enabling tx recovery
Errors in file c:\app\administrator\diag\rdbms\xdyy\xdyy\trace\xdyy_smon_7552.trc  (incident=22155):
ORA-00600: ??????, ??: [4194], [], [], [], [], [], [], [], [], [], [], []
Incident details in: c:\app\administrator\diag\rdbms\xdyy\xdyy\incident\incdir_22155\xdyy_smon_7552_i22155.trc
Database Characterset is ZHS16GBK
No Resource Manager plan active
Errors in file c:\app\administrator\diag\rdbms\xdyy\xdyy\trace\xdyy_ora_684.trc  (incident=22203):
ORA-00600: 內部錯誤代碼, 參數: [4194], [], [], [], [], [], [], [], [], [], [], []
Incident details in: c:\app\administrator\diag\rdbms\xdyy\xdyy\incident\incdir_22203\xdyy_ora_684_i22203.trc
Doing block recovery for file 3 block 1567

簡單看了下報錯內容,初步判斷是undo和控制文件損壞了。他用的windows系統,數據庫裝在了c盤,不開歸檔也沒備過份,如果是數據文件也損壞了那就無力迴天了。

一,修復控制文件

1,進入數據庫

sqlplus / as sysdba

  將數據庫打開到mount狀態

startup mount;

2,備份控制文件到c盤

ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS 'C:/1.TXT';,

3,打開1.txt將如下這段複製出來

STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "XDYY" NORESETLOGS  NOARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 2920
LOGFILE
  GROUP 1 'C:\APP\ADMINISTRATOR\ORADATA\XDYY\REDO01.LOG'  SIZE 50M BLOCKSIZE 512,
  GROUP 2 'C:\APP\ADMINISTRATOR\ORADATA\XDYY\REDO02.LOG'  SIZE 50M BLOCKSIZE 512,
  GROUP 3 'C:\APP\ADMINISTRATOR\ORADATA\XDYY\REDO03.LOG'  SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE

DATAFILE
  'C:\APP\ADMINISTRATOR\ORADATA\XDYY\SYSTEM01.DBF',
  'C:\APP\ADMINISTRATOR\ORADATA\XDYY\SYSAUX01.DBF',
  'C:\APP\ADMINISTRATOR\ORADATA\XDYY\UNDOTBS01.DBF',
  'C:\APP\ADMINISTRATOR\ORADATA\XDYY\USERS01.DBF',
  'C:\APP\ADMINISTRATOR\ORADATA\XDYY\TSP_TEST.DBF',
  'C:\APP\ADMINISTRATOR\ORADATA\XDYY\OBJECTS_TABLESPACE.DBF'
CHARACTER SET ZHS16GBK
;

4,重建控制文件,在數據庫執行:

CREATE CONTROLFILE REUSE DATABASE "XDYY" NORESETLOGS  NOARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 2920
LOGFILE
  GROUP 1 'C:\APP\ADMINISTRATOR\ORADATA\XDYY\REDO01.LOG'  SIZE 50M BLOCKSIZE 512,
  GROUP 2 'C:\APP\ADMINISTRATOR\ORADATA\XDYY\REDO02.LOG'  SIZE 50M BLOCKSIZE 512,
  GROUP 3 'C:\APP\ADMINISTRATOR\ORADATA\XDYY\REDO03.LOG'  SIZE 50M BLOCKSIZE 512

DATAFILE
  'C:\APP\ADMINISTRATOR\ORADATA\XDYY\SYSTEM01.DBF',
  'C:\APP\ADMINISTRATOR\ORADATA\XDYY\SYSAUX01.DBF',
  'C:\APP\ADMINISTRATOR\ORADATA\XDYY\UNDOTBS01.DBF',
  'C:\APP\ADMINISTRATOR\ORADATA\XDYY\USERS01.DBF',
  'C:\APP\ADMINISTRATOR\ORADATA\XDYY\TSP_TEST.DBF',
  'C:\APP\ADMINISTRATOR\ORADATA\XDYY\OBJECTS_TABLESPACE.DBF'
CHARACTER SET ZHS16GBK
;

 

5,介質恢復一下
RECOVER DATABASE ;

6,開啓數據庫:
ALTER DATABASE OPEN;

不出所料繼續報600錯位,序號4194

二,重建undo表空間

看下現在使用的undo

1,show parameter undo_tablespace;

2,在mount狀態無法創建undo表空間,只能修改spfile文件,使用system表空間暫時替代

create pfile='C:/pfile.txt' from spfile;

編輯pfile.txt

*.undo_tablespace='UNDOTBS1'
*.undo_management='AUTO'

改成

#*.undo_tablespace='UNDOTBS1'
#*.undo_management='AUTO'

*.undo_tablespace='SYSTEM'
*.undo_management='MANUAL'

3,使用修改好的pfile啓動數據庫

startup pfile='C:/pfile.txt';

 

 4,刪除原來的undo表空間

drop tablespace undotbs1 including CONTENTS;

create undo tablespace UNDOTBS1 datafile 'C:\app\Administrator\oradata\XDYY\UNDOTBS01.DBF' size 500M REUSE auto extend on maxsize  unlimited;

5,重啓數據庫,修改pfile中undo參數

#*.undo_tablespace='UNDOTBS1'
#*.undo_management='AUTO'

*.undo_tablespace='SYSTEM'
*.undo_management='MANUAL'

改回去

*.undo_tablespace='UNDOTBS1'
*.undo_management='AUTO'

6,重啓數據庫到nomount

startup nomount pfile='C:/pfile.txt';

create spfile from pfile='C:/pfile.txt';

7,重啓數據庫

SHUTDOWN IMMEDIATE;

STARTUP;

到此undo修復完成了,數據庫也正常啓動了

不過在導出或者order by 時又報臨時表空間錯誤了,那就繼續修復臨時表空間

三,修復臨時表空間

ORA-25153 臨時表空間爲空

1,新建臨時表空間

CREATE TEMPORARY TABLESPACE TMP TEMPFILE 'C:\APP\ADMINISTRATOR\ORADATA\XDYY\TMP02.dbf'  SIZE 2G AUTOEXTEND ON;

2,將默認表空間設置成新建的tmp

alter database default temporary tablespace tmp;

3,刪除原來的臨時表空間

drop tablespace temp including contents and datafiles; 

4,重啓下數據庫(隨意,不必要)

慶祝一下,到此修復全部完成。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章