expdp之include参数——实现表级别的expdp操作

时间:2023-03-08 18:01:12
expdp之include参数——实现表级别的expdp操作

需求是这样的:想将A库的某schema中的一部分表导入到B库的某schema中。

第一可以想到的是使用expdp工具,但是如何只挑选某些表呢,通过查看官方文档,include参数可以实现该需求。

include语法如下:

INCLUDE = object_type[:name_clause] [, ...]

query具体的说明请参见官方文档。

现测试如下:

1、数据库版本,

 > select * from v$version;

 BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE 11.2.0.4.0 Production TNS for 64-bit Windows: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production

2、在scott中新建三个测试表,为了能够使用query参数,此处特意以“test+数字”命名测试表

 > create table scott.test1 (id number(4), description varchar2(100));

 Table created

 SQL> create table scott.test2 (id number(4), description varchar2(100));

 Table created

 SQL> create table scott.test3 (id number(4), description varchar2(100));

 Table created

3、给三个测试表插入数据

 > select * from scott.test1;

    ID DESCRIPTION
----- --------------------------------------------------------------------------------
1 test table no.1
2 test table no.1 SQL> select * from scott.test2; ID DESCRIPTION
----- --------------------------------------------------------------------------------
1 test table no.2
2 test table no.2
3 test table no.2 SQL> select * from scott.test3; ID DESCRIPTION
----- --------------------------------------------------------------------------------
1 test table no.3
2 test table no.3
3 test table no.3
4 test table no.3

4、新建被导入的schema

 > create user scott_test identified by scotttest default tablespace users;

 User created

5、仅导出scott中的test1、test2、test3三张表

expdp \"/as sysdba\" dumpfile=scotttesttbl.dmp schema=scott include=table:\"like '%TEST%'\"

expdp之include参数——实现表级别的expdp操作

7、从上图看,确实仅导出了刚才新建的三张表,我们可以将这个dmp文件倒回到scott_test用户下验证

先给scott_test用户赋予resource权限

> grant resource to scott_test;

Grant succeeded

通过remap_schema将scott用户下的表导入scott_test用户下

impdp \"/as sysdba\" dumpfile=scotttesttbl.dmp remap_schema=scott:soctt_test

expdp之include参数——实现表级别的expdp操作

8、查看scott_test用户下的所有表

> grant connect to scott_test;

Grant succeeded
==========================
> select user from dual; USER
------------------------------
SCOTT_TEST
==========================
> select * from user_tables; TABLE_NAME TABLESPACE_NAME CLUSTER_NAME IOT_NAME STATUS PCT_FREE ... ------------------------------ ------------------------------ ------------------------------ ------------------------------ -------- ---------- ...
TEST3 USERS VALID 10 ...
TEST1 USERS VALID 10 ...
TEST2 USERS VALID 10 ...
SQL>

实验成功。

花絮:开始以为实现该功能是需要query参数,后来发现不行,query是实现更细致力度的参数,可以筛选表中符合查询条件的某些内容。