我有一个新手问题 - 我在网上搜索了很长时间,但我找不到任何答案。
据我所知,所有包,过程和存储的程序单元都存储在系统表空间或sysaux表空间中。我的要求是将一些模式从源数据库复制到目标数据库。是否足以展示模式并将它们带入目标数据库?这会带来存储的程序单元。我是否需要导出sys / system模式?我导出了一个模式并在unix中执行了以下操作。
字符串expdat.dmp | grep -i“package”但这不会返回任何内容。我也打开了exp文件并搜索了包但无济于事。所以我创建了一个parfile(tables = somepackagename),但exp抱怨找不到该对象。
任何想法?
答案 0 :(得分:1)
只要程序/功能归您导出的用户所有,它就应该在导出范围内。如果您没有找到“package”,可能是因为您导出的用户没有托管任何软件包(但可能只有独立的程序和/或功能)。 根据您的Oracle版本,您可能有expdp和选项include。
尼古拉斯。
答案 1 :(得分:0)
是的,包,过程,函数等的代码存储在SYSTEM表空间中,但是当您导出模式时Oracle不关心这一点 - 它捕获在新数据库中重新创建对象所需的DDL 。
正如N. Gasparotto所提到的,请确保您导出的架构实际上拥有感兴趣的对象。您可以使用具有目录权限的帐户连接到源数据库并发出此查询,从而获得所拥有对象的快速摘要:
select owner, object_type, count(*)
from dba_objects
group by owner, object_type
;
(例如,您可能只看到感兴趣的架构的同义词,因此它实际上并不拥有这些包)
较新的expdp / impdp实用程序具有更多功能,但缺点是需要访问数据库主机文件系统和创建Oracle目录对象的权限。 exp / imp应该适合您需要做的事情。