使用数据泵将指定的表和序列还原到一个新的schema下

Posted 鵷虹hw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用数据泵将指定的表和序列还原到一个新的schema下相关的知识,希望对你有一定的参考价值。

使用数据泵将指定的表和序列还原到一个新的schema下

 

 

 

先创建测试users

-- Create the user

create user SCOTT

default tablespace USERS

temporary tablespace TEMP

profile DEFAULT

password expire

account lock;

-- Grant/Revoke role privileges

grant connect to SCOTT;

grant resource to SCOTT;

-- Grant/Revoke system privileges

grant unlimited tablespace to SCOTT;

 

alter user scott identified by scott

 

 

 

 

-- Create the user

create user hr identified by hr

default tablespace USERS

temporary tablespace TEMP

profile DEFAULT

password expire

account lock;

-- Grant/Revoke role privileges

grant connect to hr;

grant resource to hr;

-- Grant/Revoke system privileges

grant unlimited tablespace to hr;

 

通过dba_directories 查询Oracle相关的各种目录(比如expdp dump directory) 

select * from dba_directories

 

查看scott下的对象信息

 

导出Scott

expdp system/oracle directory=expdp_dump dumpfile=expdp_scott_1017$rq.dmp logfile=expdp_scott_1017$rq.log schemas=scott;

 

 

导入指定表

 

测试1:使用tables

 

将Scott下的是TA1,TA2,TA3导入到hr下:

 

impdp system/oracle directory=expdp_dump dumpfile=expdp_scott_1017.dmp logfile=impdp_scott_1017.log remap_schema=scott:hr tables=scott.TA1,scott.TA2,scott.TA3;

 

 

查看导入hr下的对象

 

清除导入hr的对象

 

 

测试2:使用include

这种导入会提示ORA-31655:no data or metadata objects selected for job

无法导入表,需要测试1的tables导入

 

 

将Scott下的是TA1导入到hr下:

 

impdp system/oracle directory=expdp_dump dumpfile=expdp_scott_1017.dmp logfile=impdp_scott_1017.log remap_schema=scott:hr include=TABLE:\\"=\\\'scott.ta1\\\'\\";

 

将Scott下的是TA1,TA2,TA3导入到hr下:

 

impdp system/oracle directory=expdp_dump dumpfile=expdp_scott_1017.dmp logfile=impdp_scott_1017.log remap_schema=scott:hr include=TABLE:\\"in \\(\\\'TA1\\\',\\\'TA2\\\',\\\'TA3\\\'\\)\\";

 

 

导入指定序列

要导入制定列需要使用include,而且需要使用转义字符"\\"

 

 

将Scott下的是SEQ_TA1_ID导入到hr下:

 

impdp system/oracle directory=expdp_dump dumpfile=expdp_scott_1017.dmp logfile=impdp_scott_1017.log remap_schema=scott:hr include=SEQUENCE:\\"in \\(\\\'SEQ_TA1_ID\\\'\\)\\";

 

 

将Scott下的是SEQ_TA2_ID,SEQ_TA3_ID导入到hr下:

 

impdp system/oracle directory=expdp_dump dumpfile=expdp_scott_1017.dmp logfile=impdp_scott_1017.log remap_schema=scott:hr include=SEQUENCE:\\"in \\(\\\'SEQ_TA2_ID\\\',\\\'SEQ_TA3_ID\\\'\\)\\";

 

查看两次导入的对象,都成功

 

 

将Scott下的所有序列导入到hr下:

 

impdp system/oracle directory=expdp_dump dumpfile=expdp_scott_1017.dmp logfile=impdp_scott_1017.log remap_schema=scott:hr include=SEQUENCE;

查看导入的对象

 

 

当导入的对象指定前缀是也无法导入

impdp system/oracle directory=expdp_dump dumpfile=expdp_scott_1017.dmp logfile=impdp_scott_1017.log remap_schema=scott:hr include=SEQUENCE:\\"in \\(\\\'scott.SEQ_TA1_ID\\\'\\)\\";

 

 

下面尝试将表和序列一起导入,但是都不成功,只能导入序列,所以目前分开导入

 

impdp system/oracle directory=expdp_dump dumpfile=expdp_scott_1017.dmp logfile=impdp_scott_1017.log remap_schema=scott:hr include=SEQUENCE:\\"in \\(\\\'SEQ_TA2_ID\\\',\\\'SEQ_TA3_ID\\\'\\)\\" tables=scott.TA1,scott.TA2,scott.TA3;

 

 

impdp system/oracle directory=expdp_dump dumpfile=expdp_scott_1017.dmp logfile=impdp_scott_1017.log remap_schema=scott:hr tables=scott.TA1,scott.TA2,scott.TA3 include=SEQUENCE:\\"in \\(\\\'SEQ_TA2_ID\\\',\\\'SEQ_TA3_ID\\\'\\)\\";

 

 

impdp system/oracle directory=expdp_dump dumpfile=expdp_scott_1017.dmp logfile=impdp_scott_1017.log remap_schema=scott:hr include=SEQUENCE:\\"in \\(\\\'SEQ_TA2_ID\\\',\\\'SEQ_TA3_ID\\\'\\)\\",include=TABLE:\\"in \\(\\\'TA1\\\',\\\'TA2\\\',\\\'TA3\\\'\\)\\"

 

 

 

impdp system/oracle directory=expdp_dump dumpfile=expdp_scott_1017.dmp logfile=impdp_scott_1017.log remap_schema=scott:hr include=SEQUENCE:\\"in \\(\\\'SEQ_TA2_ID\\\',\\\'SEQ_TA3_ID\\\'\\)\\",TABLE:\\"in \\(\\\'TA1\\\',\\\'TA2\\\',\\\'TA3\\\'\\)\\"

 

 

impdp ORA-31655错误处理一例

http://www.oracleonlinux.cn/2012/02/impdp-ora-31655/

 

ORA-39001: invalid argument value ORA-39071: Value for EXCLUDE is badly formed.

http://www.codeweblog.com/ora-39001-invalid-argument-value-ora-39071-value-for-exclude-is-badly-formed/

 

expdp impdp中 exclude/include 的使用

http://blog.csdn.net/liqfyiyi/article/details/7248911

 

以上是关于使用数据泵将指定的表和序列还原到一个新的schema下的主要内容,如果未能解决你的问题,请参考以下文章

Oralce 数据库 - 查询数据库所有的表和视图实例演示,查询指定用户下所有表和视图方法

oracle中怎样把表、表空间导入或导出?

Oracle Recycle Bin

Hbase操作与编程使用

HiveQL

ORACLE怎么根据字段值找出所有的表和字段?