一些背景:
在大约十年前的 Oracle 10 左右(给予或接受),甲骨文添加了一种导出和导入数据库的新方法,称为Oracle 数据泵。除了愚蠢的名称外,该功能的工作原理与原始导出和导入实用程序基本相同。
原始实用程序的链接包含以下警告文本,这似乎至少有些自相矛盾:
从 Oracle 数据库 11g 开始,不支持原始导出以供一般使用。11g 中唯一支持的原始导出使用是将 XMLType 数据向后迁移到数据库版本 10g 第 2 版 (10.2) 或更早版本。因此,Oracle 建议您使用新的数据泵导出和导入实用程序,除非在以下需要原始导出和导入的情况下:
您想要导入使用原始导出实用程序 (exp) 创建的文件。
您想要导出将使用原始导入实用程序 (imp) 导入的文件。例如,如果您想从 Oracle 数据库 10g 中导出数据,然后将其导入到较早的数据库版本中。
据我所知,无法正常运行的唯一原因Exp
是Imp
数据库是否使用了 11g 以后引入的功能。否则,看起来旧的Exp
和Imp
命令应该可以正常工作,并且从上面看,它们似乎得到了官方的支持。
“数据泵”与“原始”导出的主要区别之一 - 这对我的应用程序很重要 - 数据泵仅在服务器端运行,这意味着用户至少需要一定程度的权限服务器访问导出生成的文件。最好的情况是不方便,最坏的情况是,这会导致文件不能被 dba 以外的任何人访问。
问题:
当我们从 11g 升级到 12c 时,我们在使用原始导出实用程序时遇到了问题。它会成功运行到导出触发器,然后产生如下错误:
EXP:00056 ORACLE error 4063 encountered
ORA-06508: package body XDB.DBMS_XDBUTIL_INT has errors
ORA-06508: PL/SQL: could not find program unit being called:
"XDB.DBMS_XDBUTIL_INT"
问题:
这个问题在不同的情况下至少出现了十几次,我们有点像是在玩打地鼠。解决它的最新尝试涉及重新编译服务器上的每个包,这大约需要半小时。
- 为什么这个出口问题不断出现?
Exp
实际上,正式地被Imp
弃用了,以至于我们不再能够可靠地使用它们吗?- 还有其他直接的方法来获取数据库的客户端导出吗?