1什么是directory对象
2.如何调用
操作模式
2.Schema模式
3表模式
4表空间模式
5.传输表空间模式
1.Query
与exp命令中的query功能类似,不过expdp中,该参数功能得到了增强,控制的细粒度更细。expdp中的query也是指定类似where语句来限定记录。如法如下:
query = [schema.][table_name:] query_clause
默认情况下不指定schema.table_name,则query_clause针对所有导出的表有效,或者你可以为每一个表指定不同的query_clause,如:导出a表中所有id<5的记录,导出b表中所有name=‘a'的记录,则query的参数应该如下:
query=A:"Where id <5",B:"Where name=’a‘”
如果where条件前没有指定schema名或者表名的话,默认就是针对当前所有要被导出的表。如:query = where id<5 warning:建议把query参数放入到参数文件中使用,以避免转义符带来的麻烦。
2.sample
该参数用来指定导出数据的百分比,可指定的范围从0.000001到99.99999,如法如下:
sample=[[Schema_name.]table_name:]sample_percent
指定该参数以后,expdp导出将自动控制导出的记录量,如导出A表中50%的记录,设置的sample参数如下:
sample=A:50
warning: sample_percent指定的值只是一个参考值,expdp会根据数据量算出一个近似值。
高级过滤
在导出/导入的时候,我们常常有这样的需求,只想导出/导入表结构,或者只想导出/导入数据。幸运的是数据泵也提供了该功能。使用content参数。该参数有3个属性
#ALL:导出/导入对象定义和数据,该参数的默认值就是ALL
#DATA_ONLY:只导出/导入数据。
#METADATA_ONLY:只导出/导入对象定义。
warning:有一点值得注意的是,在执行导出的时候,如果使用了高级过滤,如只导出了数据,那么导入时,需要确保数据定义已经存在,否则数据都变成没有主子了。如果数据定义存在,导入时最好指定data_only,否则会触发ORA-39151错误,因为对象已经存在了。
过滤已经存在的数据
我们知道,导入的表对象在目标库中已经存在,并且目标端没有创建数据完整性约束条件(RI)来检验数据的话,就有可能造成数据被重复导入。数据泵提供了一个新的参数table_exists_action,可以一定程度上降低重复数据的产生。该参数用来控制如果要导入的表对象存在,执行什么操作。有以下几个参数值:
#SKIP:跳过该表,继续处理下一个对象。该参数的默认就是SKIP.值得注意的是,如果你同时content参数为data_only的话,skip参数无效,默认为APPEND.
#APPEND:向现有的表中添加数据。
#TRUNCATE:TRUNCATE当前表,原后再添加纪录。使用这个参数值需要谨慎,除非确认当前表中的数据确实无用,否则可能造成数据丢失。
#REPLACE:删除并重建对象,然后再向其中添加数据。值得注意的是,如果同时指定了content参数为data_only的话,replace参数无效。
重定义表的schena或表空间
我们还可能会遇到这样的需求,把A用户的对象转移到B用户,或者更换数据的表空间。数据泵通过remap_schema和remap_tablespace参数实现了改功能。
#remap_schema:重定义对象所属schema
该参数的作用类似于IMP中的fromuser+touser,支持多个schema的转换,语法如下:
REMAP_SCHEMA=Source_schema:target_schema[,source_schema:target_schema]
如果把A的对象转换到C用户,将C转换到D用户。remap_schema=a:b,c:d
warning:不能再同一个IMPDP命令中指定remap_schema=a:b,c:d
#remap_tablespace:重定义对象所在的表空间。
该参数用来重映射导入对象存储的表空间,支持同时对多个表空间进行转换,相互间用逗号分隔。语法如下:
remap_tablespace=source_tablespace:target_tablespace[,source_tablespace:target_tablespace]
warning:如果使用remap_tablespace参数,则要保证导入的用户对目标表空间有读写权限。
优化导入/导出效率
对于大数据来说,我们不得不考虑效率问题。数据泵对效率也提出了更高的要求。
所有的优化操作都会有三种结果:变得跟好,没有变化,变得跟差。parallel参数也是这样,并不是指定一个大于1的参数,性能就会有提升。
#对于导出的parallel
对于导出来说,由于dump文件只能由一个线程操作(包括I/O处理),因此输出的dump文件只有一个,即使你指定再多的并行,实际工作仍然是一个,而且还会触发ORA-39095错误。因此,建议设置该参数小于或等于生成的dump文件数量。那么,如何控制生成的dump文件数量呢?
expdp命令提供了一个filesize参数,用来指定单个dump文件的最大容量,要有效的利用parallel参数,filesize参数必不可少。
举列:某用户对象占用了4G左右的空间,实际导出后的dump文件约为3G,我们尝试在导出该用户是指定并行度为4,设置但个文件不超过500m,则语法如下:
$expdp user/pwd directory=dump_file dumpfile=expdp_20100820_%U.dmp logfile=expdp_20100820.log
filesize=500m parallel=4
对于导入的parallel
对于导入来说,使用parallel参数则要简单的多,我认为导入更能体现parallel参数的优势。参数设置为几,则认为同时将将几张表的内容导入到库中。
举列:某dmp文件中包含了200张表,我们尝试在导入该dmp文件时指定并行度为10,则如法如下:
$impdp user/pwd directory=dump_file dumpfile=expdp_20100820.dmp logfile=impdp_20100820.log parallel=10
如何进入交互模式
在这里,我正在执行导入,我想进入交互模式,查看导入的状态。进入交互模式有两种方法,操作步骤如下:
#使用Ctrl+C退出当前模式
在命令行模式下,执行expdp/impdp命令,同时指定attach参数连接到正在制定的导入/导出任务。如:
expdp user/pwd attach=SYS_TMPORT_FULL_01
warning:如果没有指定attach参数,则默认进入正在运行的任务。不过如果当前没有正在指定的任务,而且也没有给attach赋值,那么就会报ora-31626错误。
当命令行进入交互模式后,会显示如下界面
Export>
在交互模式中,支持下面几种操作。
查看JOB的允许状态.status
回退到命令行:continue_client
增加并行parallel=4
warning:在使用导出时,不能直接指定parallel参数,否则可能会遇到ORA-39095错误,因为如过要并行导出,则必须制定多个导出文件,这里的并行导出是指,多个线程同时工作,同时从数据库中导出多个dmp文件来。
停止job:stop_job
启动job:start_job
杀掉job:kill_job
退出交互模式:exit_client
指定文件大小:filesize=1G
帮助:help
下面来看如何操作:
1创建一个目录和用户并授予用户都读写权限(测试用DBA权限)。
Directory created.
SYS@SBDB1>create tablespace cheng_tablespace datafile '/u01/app/oracle/oradata/SBDB1/cheng_tablespace01.dbf' size 50m;
Tablespace created.
SYS@SBDB1>create user chengzhuo identified by oracle default tablespace cheng_tablespace;
User created.
SYS@SBDB1>grant dba to chengzhuo;
Grant succeeded.
SYS@SBDB1>conn chengzhuo/oracle
Connected.
CHENGZHUO@SBDB1>create table t1 as select * from dba_objects;
Table created.
CHENGZHUO@SBDB1>create table t2 as select * from dba_objects;
Table created.
CHENGZHUO@SBDB1>create table t3 as select * from dba_objects;
Table created.
CHENGZHUO@SBDB1>exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
执行导出命令
[oracle@SBDB1 Desktop]$ expdp chengzhuo/oracle directory=chengzhuo dumpfile=table.dmp
Export: Release 11.2.0.4.0 - Production on Mon Dec 21 23:06:42 2015
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "CHENGZHUO"."SYS_EXPORT_SCHEMA_01": chengzhuo/******** directory=chengzhuo dumpfile=table.dmp
Estimate in progress using BLOCKS method...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 30 MB
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/COMMENT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
. . exported "CHENGZHUO"."T1" 8.433 MB 86976 rows
. . exported "CHENGZHUO"."T2" 8.433 MB 86977 rows
. . exported "CHENGZHUO"."T3" 8.433 MB 86978 rows
Master table "CHENGZHUO"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for CHENGZHUO.SYS_EXPORT_SCHEMA_01 is:
/home/oracle/table.dmp
Job "CHENGZHUO"."SYS_EXPORT_SCHEMA_01" successfully completed at Mon Dec 21 23:07:17 2015 elapsed 0 00:00:31
将dump文件传输到目标主机上
[oracle@SBDB1 ~]$ scp table.dmp PROD1:/home/oracle
oracle@prod1's password:
Permission denied, please try again.
oracle@prod1's password:
table.dmp 100% 25MB 25.5MB/s 00:00
SYS@PROD1>create tablespace cheng_tablespace datafile '/u01/app/oracle/oradata/PROD1/cheng_tablespace01.dbf' size 50m;
Tablespace created.
no rows selected
Directory created.
执行导入命令
[oracle@PROD1 ~]$ impdp system/oracle directory=chengzhuo dumpfile=table.dmp
Import: Release 11.2.0.4.0 - Production on Mon Dec 21 23:16:55 2015
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Master table "SYSTEM"."SYS_IMPORT_FULL_01" successfully loaded/unloaded
Starting "SYSTEM"."SYS_IMPORT_FULL_01": system/******** directory=chengzhuo dumpfile=table.dmp
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . imported "CHENGZHUO"."T1" 8.433 MB 86976 rows
. . imported "CHENGZHUO"."T2" 8.433 MB 86977 rows
. . imported "CHENGZHUO"."T3" 8.433 MB 86978 rows
Job "SYSTEM"."SYS_IMPORT_FULL_01" completed with 1 error(s) at Mon Dec 21 23:16:59 2015 elapsed 0 00:00:03
SYS@PROD1>select owner,table_name,tablespace_name from all_tables where owner in('CHENGZHUO');
OWNER TABLE_NAME TABLESPACE_NAME
------------ ------------ -----------------
CHENGZHUO T1 CHENG_TABLESPACE
CHENGZHUO T2 CHENG_TABLESPACE
CHENGZHUO T3 CHENG_TABLESPACE
Connected.
CHENGZHUO@PROD1>select count(*) from t1;
COUNT(*)
----------
86976
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30606744/viewspace-1876497/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/30606744/viewspace-1876497/