我欠 PDB 一个汤圆(记一次 Oracle PDB XML 恢复)

Oracle 12c 起开始支持可插拔数据库(PDB),这为数据库运维带来了很大便利。

然而……

某天晚上迁移数据,很开心的拔出插入拔出插入的过程中,一个不小心,把拔出的 XML 文件给删了!

当时我的表情是这样的:Σ(っ °Д °;)っ

还好数据文件还在,就想着怎么恢复该文件能顺利恢复该数据库。

好吧,思路 1:打开另一份 xml 文件,修改其中的内容,然后插进去。

然后打开:

Σ(  ̄д ̄;) !!!

这 TM 什么鬼,各种参数,要手动改想来不易。

然后就去 google 去了,果然有方法,Oracle 大厂就是周到。

执行如下 procedure:

1
2
3
4
DBMS_PDB.RECOVER (
pdb_descr_file IN VARCHAR2,
pdb_name IN VARCHAR2,
filenames IN VARCHAR2);

第一个参数是重新生成的 xml 文件路径,第二个为 PDB 名字,第三个则是原来拔出的 PDB 的数据文件的路径了。

几秒钟,生成了一个 xml 文件,小心翼翼搞出来,删掉原 PDB 名字。

(..•˘_˘•..)

然后插入,打开 PDB。

状态正常,没报错。

(●´∀`●)

所谓“不残血不秀”,搞数据库也是“不手抖不进步”。

当然权当玩笑,涉及数据还是要万事小心,知道自己在做什么!

PS: 元宵节遇到这种事情,怕是没吃到汤圆撒( ´◔ ‸◔`)


2018.03.04 更新:

在迁移过程中,尝试拔出,这次没有丢失 xml 文件,仍旧无法插回去,报错如下:

ORA-65180: duplicate file name encountered -

仍旧需要恢复出一个 xml 来重新插回去,对比两个 xml 文件,发现有问题的 xml 文件多了 undo 文件描述和临时表空间描述

+DATA/TEST/6007BF8…21F/DATAFILE/undo_3.234.123453671
+DATA/TEST/6614D72…4BF/TEMPFILE/test_temp.498.12345375

而可以恢复的是没有这两个表空间描述的。

具体原因待发掘。

-EOF-