我是 Oracle 新手,我的目的是将所有数据和元数据从一个模式传输到 Oracle 数据库中的另一个模式。我打算使用数据泵expdp
和impdp
命令。我对此有疑问:
- 我可以在没有用户的情况下创建目标架构,还是应该先创建用户(这也创建架构)?
- 我可以使用 SYS(作为 sysdba)帐户执行
expdp
和命令吗?impdp
这是首选方法吗? 此语句是否从模式中获取所有对象(数据和元数据)并将它们移动到不同的模式中?
expdp \"/ as sysdba\" schemas=<schemaname> directory=dumpdir dumpfile=<schemaname>.dmp logfile=expdp_<schemaname>.log
impdp
那么目标模式是命令后源模式的精确副本吗?
impdp
如果用户还不存在,它将创建用户,所以你不必担心它,除非那不是你想要的。不要运行
impdb
orexpdp
assysdba
,仅当 Oracle 支持在特定情况下要求时才这样做。为此使用普通用户 - 例如已被授予dba
角色的用户。(有[IMPORT|EXPORT]_FULL_DATABASE
专门针对此类事物的权限,您还需要授予对 Oracle 目录对象的访问权限。)完整的模式导出(元数据和内容)确实看起来像:
如果要导入到不同的用户/模式(目标数据库可以与源相同),可以使用:
如果您不想完全导入,您可以在数据和元数据上设置一些过滤器。请参阅导入操作期间的过滤。
实用程序指南包含所有详细信息,我强烈建议至少阅读概述部分。
对于导入截断的表,即您只希望将数据导入回表:
我的桌子上方是
dept
我要导入的。我之前已经截断了它。从转储文件中,TEST.dmp
我只想导入数据(表结构相同,因此我们使用参数)。logfile
expdpTEST.log
TABLE_EXISTS_ACTION
如果你截断了 2 个表,例如
emp
anddept
,并且emp
表有dept_id
作为外键,那么你需要先导入dept
表,然后再导入emp
表,以避免导入时出错。更多信息http://satya-dba.blogspot.in/2009/05/datapump.html