您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關oracle 12c因誤刪pdb數據文件導致整個數據庫打不開怎么辦的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
方法如下:
1、用sys賬號進入實例,可見容器數據庫處于mounted狀態;插在上面的所有PDB當然也都是mounted。
sqlplus sys/pwd@orcl12c as sysdba;
2、試圖打開CDB,提示有數據庫文件未能加載。
SQL> alter database open; alter database open * 第 1 行出現錯誤: ORA-01157: 無法標識/鎖定數據文件 101 - 請參閱 DBWR 跟蹤文件 ORA-01110: 數據文件 101: 'D:\APP\ADMINISTRATOR\ORADATA\ORCL12C\PDBDTJK\NMEMC.DBF'
又關閉又啟動,來回折騰,都是如此:
SQL> shutdown immediate ORA-01109: 數據庫未打開 已經卸載數據庫。 ORACLE 例程已經關閉。 SQL> startup ORACLE 例程已經啟動。 Total System Global Area 2147483648 bytes Fixed Size 3834152 bytes Variable Size 671092440 bytes Database Buffers 1459617792 bytes Redo Buffers 12939264 bytes 數據庫裝載完畢。 ORA-01157: 無法標識/鎖定數據文件 101 - 請參閱 DBWR 跟蹤文件 ORA-01110: 數據文件 101: 'D:\APP\ADMINISTRATOR\ORADATA\ORCL12C\PDBDTJK\NMEMC.DBF'
3、查閱網上資料,應該是將此遺失文件標為脫機、刪除。但提示找不到該文件!
SQL> alter database datafile 101 offline; alter database datafile 101 offline * 第 1 行出現錯誤: ORA-01516: 不存在的日志文件, 數據文件或臨時文件 "101"
這就奇怪了,明明是你提示了該文件的,現在又說不知道這個文件。
4、估計是當前所在數據庫是CDB,而這個文件屬于PDB,所以應該切換到相關PDB,再進行文件脫機。
SQL> alter session set container=PDBDTJK; 會話已更改。 SQL> show pdbs; CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 13 PDBDTJK MOUNTED
5、脫機(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 行出現錯誤: ORA-01145: 除非啟用了介質恢復, 否則不允許立即脫機 SQL> alter database datafile 'D:\APP\ADMINISTRATOR\ORADATA\ORCL12C\PDBDTJK\NMEMC.DBF' offline drop; 數據庫已更改。
6、切換回CDB,打開,成功!
SQL> alter session set container=CDB$ROOT; 會話已更改。 SQL> alter database open; 數據庫已更改。
哎,我的天吶!吶啊~~~
7、總結
1)一個PDB損壞,導致整個CDB以及其他PDB都不能用,乃至于無法恢復?不應該啊,這可是oracle啊,不可能這么弱智的
還真是。聽說oracle 12c r1版本就是,PDB宕機,CDB也會陪著一起宕;到r2就好一點,只宕PDB。
2)本次恢復,從CDB切換到PDB是關鍵。網上給出的答案,都是11g或以前的,一個實例對應一個數據庫,所以沒有數據庫切換的概念,文件說脫機就脫機了。
3)只要數據庫實例能啟動,不管CDB是否已打開,sys都能進去:
sqlplus sys/pwd@servername as sysdba;
而PDB則不行。在未打開的情況下,你用 conn user/pwd@servername 這種方式已經進不去了,但切換會話還可以:
SQL> alter session set container=PDBDTJK; 會話已更改。
這是孫悟空的一根救命毫毛。
4)以上問題的解決,現在看起來一步一步的,清晰明了,但這中間經過了多少煎熬和痛苦。昨天傍晚出現的問題,搞到21點,還沒搞定。回家繼續查資料到晚上快24點。早上七點醒來,才查了一下會話切換。早上是人最清醒的時候。
我都不清楚這個文件是怎么刪除的。在繼續使用的情況下,刪除文件系統會提示被鎖定,估計是停掉數據庫再刪除,叉啊,這不是找死嗎。我都不敢想象,如果今天數據庫沒起來,會有一翻怎樣的折騰。雖然是開發數據庫,但好多項目在使用,各有各的PDB。
感謝各位的閱讀!關于“oracle 12c因誤刪pdb數據文件導致整個數據庫打不開怎么辦”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。