如何使用expdp和impdp命令传输数据?


29

我是Oracle新手,我的目的是将所有数据和元数据从一个模式转移到Oracle数据库中的另一个模式。我打算使用数据泵expdpimpdp命令。我对此有疑问:

  • 是否可以在没有用户的情况下创建目标架构,还是应该先创建用户(它也会创建架构)?
  • 我可以使用SYS(作为sysdba)帐户执行expdpimpdp命令吗?那是首选方法吗?
  • 该语句是否从架构中获取所有对象(数据和元数据)并将它们移至其他架构中?

    expdp \"/ as sysdba\" schemas=<schemaname> directory=dumpdir dumpfile=<schemaname>.dmp logfile=expdp_<schemaname>.log  

    那么目标模式是impdp命令后源模式的精确副本吗?

Answers:


31

impdp 如果尚不存在,它将创建用户,因此您不必担心,除非那不是您想要的。

不要运行impdbexpdpas sysdba,仅在Oracle支持在特定情况下要求时才运行。为此请使用普通用户- dba例如,已被授予该角色的用户。(有[IMPORT|EXPORT]_FULL_DATABASE专门针对此类事物的特权,您还需要授予对Oracle目录对象的访问权限。)

完整的架构导出(元数据和内容)的确如下所示:

expdp user/pass schemas=<schemaname> directory=dumpdir \
      dumpfile=<schemaname>.dmp \
      logfile=expdp_<schemaname>.log

如果要导入到其他用户/架构(目标数据库可以与源数据库相同),则可以使用:

impdp user/pass schemas=schema1 directory=dumpdir \
      remap_schema=schema1:schema2 \
      dumpfile=schema1.dmp \
      logfile=impdp_schema2.log

如果您不想完全导入,则可以对数据和元数据设置一些过滤器。请参阅导入操作期间的过滤

实用程序指南》包含所有详细信息,我强烈建议您至少阅读概述部分。


2

对于导入截断的表,即,您只希望将数据导入回到表中:

impdp user/pass TABLES=dept DIRECTORY=TEST_dir dumpfile=TEST.dmp logfile=expdpTEST.log TABLE_EXISTS_ACTION=REPLACE

dept我要导入的表格上方。我已将其截断了。从转储文件是TEST.dmp,而且logfile这是expdpTEST.log我想导入只有数据(表结构是一样的,所以我们使用参数TABLE_EXISTS_ACTION)。

如果您已经截断了2个表(例如emp和)dept,并且emp表具有dept_id作为外键,那么您需要先导入该dept表,然后再导入该表,emp以避免在导入过程中出错。

更多信息http://satya-dba.blogspot.in/2009/05/datapump.html

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.