一些背景:
在大约十年前(给予或接受)的Oracle 10周围,Oracle添加了一种导出和导入数据库Oracle Data Pump的新方法。除了愚蠢的名称,功能主要与Original Export and Import Utility相同。
原始实用程序的链接包含以下警告文本,这似乎至少有些自相矛盾:
从Oracle数据库开始,不支持原始导出以供一般使用 11克。 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
实际上是否已正式弃用,以致我们无法再可靠地使用它们了?答案 0 :(得分:1)
为什么这个出口问题会不断出现?
由于问题是间歇性的,我猜它是由延迟段创建引起的。从11g开始,表和分区可以配置为在有一些数据之前不分配任何空间。 (这可以为具有许多空分区的表节省大量空间。)但Exp并不了解这一点,并假设每个表都必须有一个段。这意味着某些表格和相关功能可能会随机出现在"导致问题取决于他们最近是否已被填充或截断。
您可以使用此查询找到这些表:
select * from dba_tables where segment_created = 'NO';
然后强制他们使用此声明创建一个片段:
alter table table_name allocate extent;
Exp和Imp实际上是正式弃用,以致我们无法再可靠地使用它们了吗?
这是有争议的,但我说是的,原来的Exp和Imp真的被弃用了#34;现在。确实感觉甲骨文通过弃用软件来玩很多游戏。例如,弃用超级昂贵的Goldengate的免费更改数据捕获,或者在几乎没有人想要使用昂贵的容器时弃用非容器架构。但是很长一段时间,Exp和Imp不再削减它。
有没有其他直接的方法来获取数据库的客户端导出?
试试OCP, Oracle CoPy。您仍需要在服务器上生成导出。但是OCP允许您将文件从服务器文件系统下载到客户端文件系统,而无需任何服务器文件系统权限。它仍然不像应该的那样直截了当,但至少你不必赋予每个人对服务器文件系统的特权。