【发布时间】:2018-07-06 00:16:59
【问题描述】:
一些背景:
在大约十年前的 Oracle 10 附近(给予或接受),甲骨文添加了一种导出和导入数据库的新方法,称为 Oracle Data Pump。除了愚蠢的名称之外,该功能的工作原理大部分与Original Export and Import Utility 相同。
原始实用程序的链接包含以下警告文本,这似乎至少有些自相矛盾:
从 Oracle 数据库开始,不支持原始导出以供一般使用 11克。 11g 中唯一支持的 Original Export 使用是向后的 将 XMLType 数据迁移到数据库版本 10g 第 2 版 (10.2) 或更早。因此,Oracle 建议您使用新的 Data Pump Export 和 Import 实用程序,以下情况除外 需要原始导出和导入:
您要导入使用原始导出实用程序 (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实际上是否正式被弃用,以至于我们不再能够可靠地使用它们? - 还有其他直接的方法来获取数据库的客户端导出吗?
【问题讨论】:
-
这似乎不是a common error。您是否对此提出过服务请求? (诚然,他们可能只是告诉你升级,这并不完全有帮助......但也可能有一个修复)。有点跑题了,但是您的 11g 和 12c 实例是否无法相互通信以进行网络链接导出;或者说共享一个可以用作转储目录的 NFS 挂载?
-
升级问题是很久以前的问题了...这是最近再次出现的问题,使用的是稳定的 12c 设置。这个问题在许多不同的 Oracle 服务器上重复出现,所以我觉得我们使用 Oracle 的方式可能是导致它的原因。
-
至于 NFS 挂载,它会产生类似的问题,但由于复杂性的原因我无法深入探讨。
-
所以当你在 12c 的
exp时看到这个,或者在做其他事情的时候?您是否能够在开始导出之前立即检查该包的状态(以防它们未链接,而exp恰好注意到它已经无效)? -
听起来某些东西正在被定期删除或撤销(例如,请参阅 doc ID 2161205.1),可能是通过自动安全工具或其他东西;并重新编译所有内容(我假设您的意思是
utlrp)会临时重新创建或重新授予它。然后exp工作,直到它再次被删除。但真的只是猜测。如果您不知道这样的事情,我认为这可能是您需要提出 SR 的事情。
标签: database oracle oracle12c impdp expdp