expdp
和impdp
命令。我对此有疑问:我可以在没有用户的情况下创建目标架构,还是应该先创建用户(它也会创建架构)?
我可以使用SYS(作为sysdba)帐户执行
expdp
和impdp
命令吗?这是首选方法吗?该语句是否从架构中获取所有对象(数据和元数据)并将它们移动到其他架构中?
expdp \"/ as sysdba\" schemas=<schemaname> directory=dumpdir dumpfile=<schemaname>.dmp logfile=expdp_<schemaname>.log
那么,目标模式是否是
impdp
命令后的源模式的精确副本?#1 楼
impdp
将创建一个尚不存在的用户,因此除非您不想要它,否则您不必担心。不要将
impdb
或expdp
作为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
表,以避免在导入期间出错。 /satya-dba.blogspot.in/2009/05/datapump.html