前言
最近因?yàn)橐晃煌抡`刪了某個(gè)插件數(shù)據(jù)庫(kù)(PDB)的數(shù)據(jù)文件,結(jié)果整個(gè)數(shù)據(jù)庫(kù),包括容器數(shù)據(jù)庫(kù)(CDB),以及其他插件數(shù)據(jù)庫(kù)都用不了了。無(wú)奈。。。通過(guò)嘗試各種方法最終解決了,覺(jué)著有必要將解決的過(guò)程分享出來(lái),方法大家參考學(xué)習(xí),下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧。
方法如下:
1、用sys賬號(hào)進(jìn)入實(shí)例,可見(jiàn)容器數(shù)據(jù)庫(kù)處于mounted狀態(tài);插在上面的所有PDB當(dāng)然也都是mounted。
sqlplus sys/pwd@orcl12c as sysdba;
2、試圖打開(kāi)CDB,提示有數(shù)據(jù)庫(kù)文件未能加載。
SQL> alter database open;alter database open*第 1 行出現(xiàn)錯(cuò)誤:ORA-01157: 無(wú)法標(biāo)識(shí)/鎖定數(shù)據(jù)文件 101 - 請(qǐng)參閱 DBWR 跟蹤文件ORA-01110: 數(shù)據(jù)文件 101:'D:/APP/ADMINISTRATOR/ORADATA/ORCL12C/PDBDTJK/NMEMC.DBF'
又關(guān)閉又啟動(dòng),來(lái)回折騰,都是如此:
SQL> shutdown immediate ORA-01109: 數(shù)據(jù)庫(kù)未打開(kāi)已經(jīng)卸載數(shù)據(jù)庫(kù)。ORACLE 例程已經(jīng)關(guān)閉。SQL> startupORACLE 例程已經(jīng)啟動(dòng)。Total System Global Area 2147483648 bytesFixed Size 3834152 bytesVariable Size 671092440 bytesDatabase Buffers 1459617792 bytesRedo Buffers 12939264 bytes數(shù)據(jù)庫(kù)裝載完畢。ORA-01157: 無(wú)法標(biāo)識(shí)/鎖定數(shù)據(jù)文件 101 - 請(qǐng)參閱 DBWR 跟蹤文件ORA-01110: 數(shù)據(jù)文件 101:'D:/APP/ADMINISTRATOR/ORADATA/ORCL12C/PDBDTJK/NMEMC.DBF'
3、查閱網(wǎng)上資料,應(yīng)該是將此遺失文件標(biāo)為脫機(jī)、刪除。但提示找不到該文件!
SQL> alter database datafile 101 offline;alter database datafile 101 offline*第 1 行出現(xiàn)錯(cuò)誤:ORA-01516: 不存在的日志文件, 數(shù)據(jù)文件或臨時(shí)文件 "101"
這就奇怪了,明明是你提示了該文件的,現(xiàn)在又說(shuō)不知道這個(gè)文件。
4、估計(jì)是當(dāng)前所在數(shù)據(jù)庫(kù)是CDB,而這個(gè)文件屬于PDB,所以應(yīng)該切換到相關(guān)PDB,再進(jìn)行文件脫機(jī)。
SQL> alter session set container=PDBDTJK;會(huì)話已更改。SQL> show pdbs; CON_ID CON_NAME OPEN MODE RESTRICTED---------- ------------------------------ ---------- ---------- 13 PDBDTJK MOUNTED
5、脫機(jī)(offline,drop),成功!
SQL> alter database datafile 'D:/APP/ADMINISTRATOR/ORADATA/ORCL12C/PDBDTJK/NMEMC.DBF' offline;alter database datafile 'D:/APP/ADMINISTRATOR/ORADATA/ORCL12C/PDBDTJK/NMEMC.DBF' offline*第 1 行出現(xiàn)錯(cuò)誤:ORA-01145: 除非啟用了介質(zhì)恢復(fù), 否則不允許立即脫機(jī)SQL> alter database datafile 'D:/APP/ADMINISTRATOR/ORADATA/ORCL12C/PDBDTJK/NMEMC.DBF' offline drop;數(shù)據(jù)庫(kù)已更改。
6、切換回CDB,打開(kāi),成功!
SQL> alter session set container=CDB$ROOT;會(huì)話已更改。SQL> alter database open;數(shù)據(jù)庫(kù)已更改。
哎,我的天吶!吶啊~~~
7、總結(jié)
1)一個(gè)PDB損壞,導(dǎo)致整個(gè)CDB以及其他PDB都不能用,乃至于無(wú)法恢復(fù)?不應(yīng)該啊,這可是oracle啊,不可能這么弱智的
還真是。聽(tīng)說(shuō)oracle 12c r1版本就是,PDB宕機(jī),CDB也會(huì)陪著一起宕;到r2就好一點(diǎn),只宕PDB。
2)本次恢復(fù),從CDB切換到PDB是關(guān)鍵。網(wǎng)上給出的答案,都是11g或以前的,一個(gè)實(shí)例對(duì)應(yīng)一個(gè)數(shù)據(jù)庫(kù),所以沒(méi)有數(shù)據(jù)庫(kù)切換的概念,文件說(shuō)脫機(jī)就脫機(jī)了。
3)只要數(shù)據(jù)庫(kù)實(shí)例能啟動(dòng),不管CDB是否已打開(kāi),sys都能進(jìn)去:
sqlplus sys/pwd@servername as sysdba;
而PDB則不行。在未打開(kāi)的情況下,你用 conn user/pwd@servername 這種方式已經(jīng)進(jìn)不去了,但切換會(huì)話還可以:
SQL> alter session set container=PDBDTJK;會(huì)話已更改。
這是孫悟空的一根救命毫毛。
4)以上問(wèn)題的解決,現(xiàn)在看起來(lái)一步一步的,清晰明了,但這中間經(jīng)過(guò)了多少煎熬和痛苦。昨天傍晚出現(xiàn)的問(wèn)題,搞到21點(diǎn),還沒(méi)搞定。回家繼續(xù)查資料到晚上快24點(diǎn)。早上七點(diǎn)醒來(lái),才查了一下會(huì)話切換。早上是人最清醒的時(shí)候。
我都不清楚這個(gè)文件是怎么刪除的。在繼續(xù)使用的情況下,刪除文件系統(tǒng)會(huì)提示被鎖定,估計(jì)是停掉數(shù)據(jù)庫(kù)再刪除,叉啊,這不是找死嗎。我都不敢想象,如果今天數(shù)據(jù)庫(kù)沒(méi)起來(lái),會(huì)有一翻怎樣的折騰。雖然是開(kāi)發(fā)數(shù)據(jù)庫(kù),但好多項(xiàng)目在使用,各有各的PDB。
好了,以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)VeVb武林網(wǎng)的支持。
新聞熱點(diǎn)
疑難解答
圖片精選