事實(shí)證明,不作死就不會死,這次Oracle崩潰,花費(fèi)了我兩天的時(shí)間,只由于我裝了些莫名的安卓摹擬器以后又卸載了。
卸載以后,發(fā)現(xiàn)oracle數(shù)據(jù)庫用不了了,心1涼,由于自己存了進(jìn)兩年的數(shù)據(jù)全在里面,近70個(gè)g。因而趕快進(jìn)Net Manager,進(jìn)不去了,需要輸入配置文件的路徑!這絕對是ORAACLE_HOME沒了。。。因而在環(huán)境變量中添加1個(gè)ORACLE_HOME變量,地址指向E:oracleproduct10.2.0db_1。再進(jìn)Net Manager,沒問題了,卻發(fā)現(xiàn)報(bào)錯(cuò)ora⑴2514。。。
這是個(gè)最最多見的報(bào)錯(cuò),意味著很容易解決或很難解決。
趕快搜搜,網(wǎng)上1般兩種做法:1.修改監(jiān)聽文件listener.ora文件,在里面加1段SID_DESC...GLOBAL_NAME= orcl (自己的實(shí)例名),解釋是由于靜態(tài)監(jiān)聽需要設(shè)置主動(dòng)尋覓該實(shí)例,否則它找不到這個(gè)實(shí)例。因而我如是修改,接著報(bào)另外一個(gè)毛病:ora-01034和ora⑵7101。
繼續(xù)上網(wǎng)尋覓,說是由于不正常退出等1些操作而致使Oracle不知道指向哪一個(gè)實(shí)例名,需要在cmd中用set ORACLE_SID=orcl設(shè)置,因而設(shè)置。接著需要重新啟動(dòng)Oracle。這時(shí)候問題又來了,我居然忘記自己的sys用戶了!由于時(shí)間久遠(yuǎn),自己怎樣都想不起來自己的sys用戶了,也就是說,當(dāng)我在cmd中進(jìn)入sqlplus后,沒法conn了。。。這下我突然慌神了,感覺問題挺大。
上1條路走不通,我決定換個(gè)思路,就是這么活躍。網(wǎng)上還有1種辦法就是說重建監(jiān)聽。那就重建唄。cmd中netca邊建邊視察。基本無異常。建立成功。然后在OS的服務(wù)中找到監(jiān)聽服務(wù),啟動(dòng)之(這里也能夠在cmd中l(wèi)snrctl start)。但是啟動(dòng)后還是報(bào)ora⑴2514,就是說所有努力都白費(fèi)啦!!!
冷靜下來分析緣由,竟發(fā)現(xiàn)服務(wù)中有兩個(gè)監(jiān)聽服務(wù):1個(gè)是標(biāo)準(zhǔn)的OracleOraDb10g_home1TNSListener,另外一個(gè)則是OracleTNSListener,而后者啟動(dòng)了,前者沒有啟動(dòng)。上網(wǎng)搜下它們的區(qū)分,沒有資料,心里很困惑。
因而打算再建個(gè)監(jiān)聽看看。netca接著建,發(fā)現(xiàn)又多了1個(gè)監(jiān)聽服務(wù):OracleTNSListener1。我似乎明白了甚么。。。上網(wǎng)搜索監(jiān)聽服務(wù)的命名規(guī)則,發(fā)現(xiàn)是以Oracle開頭,TNS+監(jiān)聽名結(jié)尾,中間加上ORACLE_HOME_NAME構(gòu)成。瞬間明白了,原來ORACLE_HOME_NAME這個(gè)配置都沒了!這個(gè)ORACLE_HOME_NAME其實(shí)就是在你安裝數(shù)據(jù)庫時(shí)默許的1個(gè)選項(xiàng),叫做名稱。
了解以后,決定環(huán)境變量中設(shè)置ORACLE_HOME_NAME。這個(gè)信息包括上面的ORACLE_HOME其實(shí)都在oracle的1個(gè)配置文件中保存的。當(dāng)配置文件丟失時(shí),oracle還會通過環(huán)境變量來找,所以在環(huán)境變量中配置好,oracle就能夠使用了。配置ORACLE_HOME_NAME,值為OraDb10g_home1。
配置完成,刪除1切監(jiān)聽,重建。以后發(fā)現(xiàn),標(biāo)準(zhǔn)的OracleOraDb10g_home1TNSListener的出現(xiàn)了,而且啟動(dòng)了!下面的OracleServiceORCL是1直都啟動(dòng)的,這兩個(gè)服務(wù)都啟動(dòng)了,就意味著。。。弄好了!
呵呵,還是太天真。照舊報(bào)ora⑴2514毛病。
我又冷靜了大半天,通過連接其它機(jī)器的數(shù)據(jù)庫和查看監(jiān)聽狀態(tài)lsnrstl status來檢查監(jiān)聽是不是正常,發(fā)現(xiàn)監(jiān)聽是沒問題的。既然監(jiān)聽沒問題,也就是說,上面的努力全白費(fèi)了,數(shù)據(jù)庫連不上的根本緣由實(shí)際上是實(shí)例的問題。
又查閱alert_orcl.log文件(E:oracleproduct10.2.0adminorcldump下),翻到最后部份,發(fā)現(xiàn)1些tns⑴2560毛病。結(jié)合網(wǎng)上的1些說法,最后推定:Oracle數(shù)據(jù)庫壞了。。。
這真是巨大的悲劇。我沒有sys用戶,沒法nomount、mount、open,不知道具體哪部份產(chǎn)生了甚么樣的毛病。或許重新啟動(dòng)1下就行了,但是我沒有sys用戶,就沒有操作的權(quán)限。
只能改變思路,決心重新安裝數(shù)據(jù)庫了!
那末,我就要使用數(shù)據(jù)文件來進(jìn)行數(shù)據(jù)恢復(fù)了!
上網(wǎng)搜索,很多教程,發(fā)現(xiàn)它們都是在講只有數(shù)據(jù)文件的恢復(fù),而我現(xiàn)在數(shù)據(jù)文件、控制文件、日志文件都在,感覺應(yīng)當(dāng)會更加簡單。因而決定先在別的電腦上實(shí)驗(yàn)1下。
我翻出自己的筆記本,網(wǎng)上的教程說只要建立個(gè)同名的實(shí)例,端口等1致便可,然后將上述文件(主要是oradata這個(gè)文件夾)copy進(jìn)去覆蓋掉,再重啟服務(wù)就好了。那就這么試試吧!
但這里我發(fā)現(xiàn)個(gè)問題,筆記本是11g的Oracle,真是坑爹。無奈只好硬著頭皮將上述文件拷到對應(yīng)文件夾下。
cmd進(jìn)入到sys用戶(本的sys用戶存在),開始嘗試啟動(dòng):shutdown immediate、start nomount都沒問題(nomount是參數(shù)文件找控制文件,只要控制文件路徑準(zhǔn)確,就不會報(bào)錯(cuò)),接著alter database mount(這階段是控制文件找數(shù)據(jù)文件,找不到就會報(bào)錯(cuò)),報(bào)錯(cuò),由于數(shù)據(jù)文件在控制文件中存儲的地址是10g的E:oracleproduct10.2.0oradata,而不是11g的app...因而將數(shù)據(jù)文件拷貝到控制文件指向的地址(都被逼到這份兒上了― ―!),以后啟動(dòng)mount,沒問題!
突然全部人躁起來了!這是要成功嗎?
然后alter database open了啊!屏幕上蹦蹦蹦往下彈些良好的信息了啊!要成功了嗎?
呵呵,還是太天真。ora-00704和ora⑶9700。繼續(xù)搜索,發(fā)現(xiàn)是數(shù)據(jù)字典表由于版本的問題而報(bào)錯(cuò)啊!網(wǎng)上說履行sql腳本更新數(shù)據(jù)字典。那就整吧!
catupgrd.sql、catalog.sql、catproc.sql、utlrp.sql4個(gè)腳本,在cmd的sqlplus中@路徑來履行。這4個(gè)腳本在我這里只找到3個(gè),第3個(gè)沒有,因而順次履行。
呵呵,1大波毛病滾屏襲來啊!!!全是沒法創(chuàng)建啊!!!感覺要跳樓了啊!!!
冷靜片刻,覺得10g和11g是不可逾越的鴻溝,因而決定,卸載11g,改成10g繼續(xù)上面的操作。
10g安裝終了,將oradata覆蓋,繼續(xù)在cmd的sqlplus中履行。shutdown immediate、start nomount、alter database mount沒問題,alter database open。。。又報(bào)錯(cuò)了。。。我去,居然報(bào)dbf文件是11g的而不是10g的!原來dbf被11g這么1弄就被玷污了啊!真是羞澀啊!
重新拷10g的oradata文件夾,繼續(xù)open。。。
終究成功了!!!
弄了我兩天啊!!!成功了!!!
總結(jié)1下:
(1)ora⑴2514只有兩方面毛病,監(jiān)聽異常,或?qū)嵗磫?dòng),可以在這兩方面進(jìn)行排查,而不去盲目地依照網(wǎng)上的方法改listener.ora和重建監(jiān)聽,或許是實(shí)例不行了呢;
(2)若要進(jìn)行數(shù)據(jù)恢復(fù),則最好有oradata這個(gè)文件夾下的所有文件,這樣有恃無恐;
(3)我折騰兩天,或許在最開始重啟數(shù)據(jù)庫就會恢復(fù)正常,但是sys用戶丟了,使得這1切困難起來;
(4)要學(xué)會冷靜分析,結(jié)合自己遇到的情況采取相應(yīng)的措施,而不能1味依照網(wǎng)上的解決辦法履行,那或許其實(shí)不合適你;
(5)多多備份,不要偷懶!
沒了。