今天過來頭說老總的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打開數據庫