ORA-12560、ORA-01033、ORA-00600

今天過來頭說老總的windows機器上oracle用pl/sql登錄不上去,報ORA-01033錯誤(ORACLE initialization or shutdown in progress

問題解決:

第一步:

1、我先打開cmd,試了一下sqlplus / as sysdba發現直接報ORA-12560(TNS: 協議適配器錯誤)

2、運行services.msc查看ORACLE監聽及實例服務(OracleOraDB12Home1TnsListener、OracleService<SID>)有沒有啓動,發現都是啓動的。

按常理來說本地登錄根本跟監聽沒關係,想到會不會是實例名不對,進入註冊表查看目前到底用的是哪個實例

3、運行regedit,進入HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0將該環境變量ORACLE_SID就是實例

4、設置環境變量,添加變量名=oracle_sid,變量值=實例名,即可,或者臨時設置set ORACLE_SID=實例名

發現這樣設置後還是報ORA-12560

5、想到會不會是該機器上以前安裝過多個實例,環境變量太多的問題,查看環境變量發現果然是有好多,有多個實例,也安裝了客戶端,ORACLE如果用客戶端連接時必須有監聽,因此我們相當於用的是客戶端的plsql,應該進入服務器下的sqlplus登錄,進入服務器安裝的目錄,果然登錄進去了

6、在用sqlplus users/pwd@ip:port/sid發現登錄時報 ORA-01033錯誤,估計是異常關機導致的,shutdown immeidate,再次startup時出現ORA-00600錯誤

7、該錯誤大體信息:ORA-00600: 內部錯誤代碼, 參數: [kcratr_nab_less_than_odr], [1], [99189],[43531], [43569], [], [], [], [], [], [], []

第二步,解決ORA-00600問題

1、SQL> SELECT STATUS FROM V$INSTANCE;
 
STATUS
------------
MOUNTED
 
2、嘗試直接recover database
SQL> RECOVER DATABASE ;
ORA-00283: 恢復會話因錯誤而取消
ORA-00264: 不要求恢復

3、嘗試不完全恢復
SQL> RECOVER DATABASE UNTIL CANCEL;
ORA-10879: error signaled in parallel recovery slave
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 將出現如下錯誤
ORA-01152: 文件 1 沒有從過舊的備份中還原
ORA-01110: 數據文件 1: 'f:\my\DATA\SYSTEM01.DBF'

4、重建控制文件
SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS 'f:/1.txt';
 
數據庫已更改。
 
5、SQL> SHUTDOWN IMMEDIATE;
ORA-01109: 數據庫未打開
 
 
已經卸載數據庫。
ORACLE 例程已經關閉。
6、SQL> STARTUP NOMOUNT;
ORACLE 例程已經啓動。

7、從剛纔備份的控制文件f:/1.txt中copy出並執行:

SQL> CREATE CONTROLFILE REUSE DATABASE "my" NORESETLOGS  NOARCHIVELOG
  2      MAXLOGFILES 16
  3      MAXLOGMEMBERS 3
  4      MAXDATAFILES 100
  5      MAXINSTANCES 8
  6      MAXLOGHISTORY 18688
  7  LOGFILE
  8    GROUP 1 'D:\my\LOG\REDO01.LOG'  SIZE 50M BLOCKSIZE 512,
  9    GROUP 2 'D:\my\LOG\REDO02.LOG'  SIZE 50M BLOCKSIZE 512,
 10    GROUP 3 'D:\my\LOG\REDO03.LOG'  SIZE 50M BLOCKSIZE 512
 11  DATAFILE
 12    'D:\my\DATA\SYSTEM01.DBF',
 13    'D:\my\DATA\SYSAUX01.DBF',
 14    'D:\my\DATA\RBSG01.DBF',
 15    'D:\my\DATA\DATA01.DBF',
 16    'D:\my\DATA\INDX01.DBF',
 17    'D:\my\DATA\DATA02.DBF',
 18    'D:\my\DATA\DATA03.DBF',
 19    'D:\my\DATA\DATA04.DBF',
 20    'D:\my\DATA\INDX02.DBF',
 21    'D:\my\DATA\SYSTEM02.DBF'
 22  CHARACTER SET ZHS16GBK
 23  ;

控制文件已創建。

8、繼續嘗試恢復
SQL> RECOVER DATABASE ;
完成介質恢復。
9、SQL> ALTER DATABASE OPEN;
 
數據庫已更改。

至此 數據庫恢復成功。

在這次恢復中,主要就是重建控制文件,然後直接恢復成功,如果redo有損壞,那麼可能需要使用不完全恢復,然後使用resetlogs打開數據庫

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