天天看點

ORA-12560: TNS: Protocol Adapter Error ORA-00600: [2037] 在WIN上一次處理

database:10.2.0.1

OS WINDOWS SERVER 2008

今天由于朋友的資料的斷電重新開機後,資料庫起不來,更蛋疼的是SQLPLUS,LSNRCTL都進不去

要麼一直hang住要麼報錯

 ORA-12560: TNS: Protocol Adapter Error

由于alert日志非常大,我建立了一個日志檔案發現DOWN庫的報錯如下:

Mon May 09 13:31:43 2016

Completed redo application

Errors in file d:\oracle\product\10.2.0\db_1\admin\orcl\bdump\orcl_p001_5116.trc:

ORA-00600: internal error code, arguments: [2037], [12627367], [2913444358], [6], [1], [0], [1667018151], [100925440]

Errors in file d:\oracle\product\10.2.0\db_1\admin\orcl\bdump\orcl_p000_1372.trc:

ORA-00600: internal error code, arguments: [2037], [12622839], [2616697350], [6], [1], [0], [1668258807], [100875008]

Errors in file d:\oracle\product\10.2.0\db_1\admin\orcl\bdump\orcl_p002_968.trc:

ORA-00600: internal error code, arguments: [2037], [12637266], [3562185222], [6], [4], [0], [294376530], [100743216]

Errors in file d:\oracle\product\10.2.0\db_1\admin\orcl\udump\orcl_ora_4960.trc:

ORA-07445: exception encountered: core dump [ACCESS_VIOLATION] [_kews_cln_timestate+720] [PC:0x603310] [ADDR:0xC876412] [UNABLE_TO_READ] []

ORA-01033: ORACLE initialization or shutdown in progress

看到這裡錯誤為ORA-00600和ORA-07445這種錯誤很可能導緻資料庫崩潰,同時隻能提取備份進行恢複,更郁悶的是壓根沒有備份。

檢視TRACE檔案如下:

TYP:0 CLS: 1 AFN:3 DBA:0x00c09bf7 OBJ:3690 SCN:0x0000.666d636d SEQ:  9 OP:11.2

buffer rdba: 0x9bf7a206

scn: 0x636f.636f9bf7 seq: 0x00 flg: 0x00 tail: 0x06033b00

frmt: 0x06 chkval: 0x0000 type: 0x01=KTU UNDO HEADER

Hex dump of corrupt header 4 = CORRUPT

如此我們可以總結一下,錯誤是在進行了

開啟并行UNDO復原的時候出現的,TRACE中也能明顯的看到

錯誤

0x01=KTU UNDO HEADER

那麼我們大概可以知道由于UNDO的損壞導緻了資料庫恢複不能進行恢複,那麼首先我們關閉掉并行恢複,

然後設定損壞的UNDO,同時設定不進行復原,如果出現問題我們在一步一步的解決隻能聽天由命了,

幸運的是這個庫這樣做後正常啟動了。但是在此之前我們必須解決SQLPLUS 根本不能的登陸的問題。

我檢視了MOS的很多關于

的錯誤的文章,大概都是如下的描述:

1、ORACLE_HOME正确

2、PATH正确

3、ORACLE_SID正确

4、權限正确

5、可能多個oracle的軟體有SQLPLUS使用正确的那一個其實就是PATH正确

我逐個排查,但是還是沒有效果,我用ORADIM重建了服務如下:

oradim -new -sid -startmode AUTO -pfile

同時我還檢查PWDfile存在,其實不關這個事

關于LISTENER我也設定了HOSTS多次試驗,LINUX下HOSTS如果設定不正确

動态注冊會有問題,還是不行我又設定了固定IP,還是不行。檢查LISTER日志

沒有超過4G。

但是還是不行,資料一旦啟動DOWN掉後就登陸不進去了,郁悶了很久WINDOWS的東西就是這樣稀奇古怪,

當然也是和運維人員的WINDOWS水準有關,因為要知道線上的伺服器一般都不是WINDOWS。

搞了好幾個小時一直沒解決,又不想草草了事。

最後我發現雖然ORACLE執行個體DOWN掉了,但是WINDOWS程序還占用了部分記憶體,猶如LINUX下使用IPCS -m

看到沒有完全釋放記憶體一樣,如此我使用了

oradim -new -sid -startmode m -pfile

設定ORACLE資料庫不随服務啟動,這下終于可以連接配接到空執行個體了。

接下來我們就按照正常的方法設定幾個參數,然後慢慢看是否報錯吧

1、undo_mangment='MANUAL'

2、fast_start_parallel_rollback=false

3、*._corrupted_rollback_segments=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)

還是不行加上參數

4、_ALLOW_RESETLOGS_CORRUPTION=true 

在mount階段我做了RECOVER DATABASE使用LOGFILE進行了恢複完成了這一步

其實這一步一定成功因為LOGFILE恢複沒有問題,

然後我就

ALTER DATABASE OPEN

成功啟動。

沒有出現額外的ORA-600錯誤如:

ora-600[2662](推進scn)

ora-600[4194]

最後導出資料,建立庫吧。

這完全是幸運。

主要解決了2個問題

1、ORA-12560: TNS: Protocol Adapter Error  由于ORACLE随服務啟動後DOWN掉沒有完全示範程序記憶體。

2、ORA-00600: internal error code, arguments: [2037] 由于UNDO PARALLEL RECOVERY失敗。