来源:http://lzfhope.blog.163.com/blog/static/63639922008394255736/
一,expdp
1.1 命令行下expdp的解释
在命令行下输入expdp help=y 就会出现如下的说明,如果了解exp,那么一些参数还是可以看懂的。
Export: Release 10.2.0.1.0 - Production on 星期三, 09 4月, 2008 14:31:55
Copyright (c) 2003, 2005, Oracle. All rights reserved.
数据泵导出实用程序提供了一种用于在 Oracle 数据库之间传输
数据对象的机制。该实用程序可以使用以下命令进行调用:
示例: expdp scott/tiger DIRECTORY=dmpdir DUMPFILE=scott.dmp
您可以控制导出的运行方式。具体方法是: 在 'expdp' 命令后输入
各种参数。要指定各参数, 请使用关键字:
格式: expdp KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)
示例: expdp scott/tiger DUMPFILE=scott.dmp DIRECTORY=dmpdir SCHEMAS=scott
或 TABLES=(T1:P1,T1:P2), 如果 T1 是分区表
USERID 必须是命令行中的第一个参数。
关键字 说明 (默认)
------------------------------------------------------------------------------
ATTACH 连接到现有作业, 例如 ATTACH [=作业名]。
COMPRESSION 减小有效的转储文件内容的大小
关键字值为: (METADATA_ONLY) 和 NONE。
CONTENT 指定要卸载的数据, 其中有效关键字为:
(ALL), DATA_ONLY 和 METADATA_ONLY。
DIRECTORY 供转储文件和日志文件使用的目录对象。
DUMPFILE 目标转储文件 (expdat.dmp) 的列表,
例如 DUMPFILE=scott1.dmp, scott2.dmp, dmpdir:scott3.dmp。
ENCRYPTION_PASSWORD 用于创建加密列数据的口令关键字。
ESTIMATE 计算作业估计值, 其中有效关键字为:
(BLOCKS) 和 STATISTICS。
ESTIMATE_ONLY 在不执行导出的情况下计算作业估计值。
EXCLUDE 排除特定的对象类型, 例如 EXCLUDE=TABLE:EMP。
FILESIZE 以字节为单位指定每个转储文件的大小。
FLASHBACK_SCN 用于将会话快照设置回以前状态的 SCN。
FLASHBACK_TIME 用于获取最接近指定时间的 SCN 的时间。
FULL 导出整个数据库 (N)。
HELP 显示帮助消息 (N)。
INCLUDE 包括特定的对象类型, 例如 INCLUDE=TABLE_DATA。
JOB_NAME 要创建的导出作业的名称。
LOGFILE 日志文件名 (export.log)。
NETWORK_LINK 链接到源系统的远程数据库的名称。
NOLOGFILE 不写入日志文件 (N)。
PARALLEL 更改当前作业的活动 worker 的数目。
PARFILE 指定参数文件。
QUERY 用于导出表的子集的谓词子句。
SAMPLE 要导出的数据的百分比;
SCHEMAS 要导出的方案的列表 (登录方案)。
STATUS 在默认值 (0) 将显示可用时的新状态的情况下,
要监视的频率 (以秒计) 作业状态。
TABLES 标识要导出的表的列表 - 只有一个方案。
TABLESPACES 标识要导出的表空间的列表。
TRANSPORT_FULL_CHECK 验证所有表的存储段 (N)。
TRANSPORT_TABLESPACES 要从中卸载元数据的表空间的列表。
VERSION 要导出的对象的版本, 其中有效关键字为:
(COMPATIBLE), LATEST 或任何有效的数据库版本。
下列命令在交互模式下有效(使用ctrl+c却换到交互模式下)。
注: 允许使用缩写
命令 说明
------------------------------------------------------------------------------
ADD_FILE 向转储文件集中添加转储文件。
CONTINUE_CLIENT 返回到记录模式。如果处于空闲状态, 将重新启动作业。
EXIT_CLIENT 退出客户机会话并使作业处于运行状态。
FILESIZE 后续 ADD_FILE 命令的默认文件大小 (字节)。
HELP 总结交互命令。
KILL_JOB 分离和删除作业。
PARALLEL 更改当前作业的活动 worker 的数目。
PARALLEL=<worker 的数目>。
START_JOB 启动/恢复当前作业。
STATUS 在默认值 (0) 将显示可用时的新状态的情况下,
要监视的频率 (以秒计) 作业状态。
STATUS[=interval]
STOP_JOB 顺序关闭执行的作业并退出客户机。
STOP_JOB=IMMEDIATE 将立即关闭
数据泵作业。
1.2 参数详细介绍
仅仅由expdp自己产生的简单介绍,那是远远不够的.
1.2.1 attach
格式 :ATTACH [=[schema_name.]job_name]
作用:把客户端会话连接到现存的任务,并且自动地让命令处于交互模式,然后会给出连接的任务的描述,同时也给出导出的提示。
说明:shema_name模式名称是可选的,等同于export中的owner,如果不是登录用户,则必须要求登录用户有exp_full_database的角色。只要有一个export任务和现存的模式有关,并且该任务是活动的,那么job_name也是可选的。如果希望把一个已经停止的任务连接上,则必须提供job_name参数。
可以通过视图dba_datapump_jobs和user_datapump_jobs来查看存在的数据泵任务名称。
限制:如果已经使用了该参数,则其它参数不能再用(user/password除外);在其它模式中非执行中的任务是不能连接的;如果任务相关的dump文件集合或者主表已经被删除,那么也会导致失败;对任务主表的任意修改都可能产生不可预测的结果。
例子:expdp test/test@connstr attach=job_name
问题: 如果创建一个datapump job?
1.2.2 compression
格式:compression=(METADATA_ONLY|NONE) ,默认是metadata_only
作用:是否压缩原数据
说明:如上。
限制:无
例子:略
1.2.3 content
格式:CONTENT=(ALL|DATA_ONLY|METADATA_ONLY)
作用:指定要导出的对象范围.
说明:all表示导出所有对象包括原数据和数据,data_only就是仅仅导出表格对象,metadata_only 仅仅导出数据库定义。
限制:不能和参数transport_tablespaces一起使用。
例子:略
1.2.4 DIRECTORY
格式:DIRECTORY=DIRECOTRY_OBJECT
作用:指定导出文件存储的地方包括日志存储的地方。
说明:directory_object 指的是oracle的目录对象,非操作系统目录。如果没有指定该参数则默认是data_pump_dir对象指定的位置。至于data_pump_dir在什么位置,可以查询视图获得:
SQL> select directory_path from dba_directories where directory_name='DATA_PUMP_DIR';
DIRECTORY_PATH
--------------------------------------------------------------------------------
D:/oracle/product/10.2.0/admin/apexcrm/dpdump/
至于目录的创建,可以参考命令create directory。
dumpfile和logfile参数中指定的目录会覆盖这个参数.
限制:无
例子:略
1.2.5 DUMPFILE
格式:DUMPFILE=[DIRECTORY_OBJECT:FILENAME [,...]
作用:指定要存储数据的文件的名称。
说明:这是可选的参数,directory_object也是可选的。可以指定多个文件名称,之间用逗号分隔。如果没有为文件指定扩展名,则默认是dmp.
文件名称可以包含置换变量%U,这表示会产生多个文件。而%U将会在00到99之间,例如文件名称为exp%U_%U.dmp,那么最终产生的文件会是exp00_00.dmp,exp01_01.dmp,一直到exp99_99.dmp(如果有那么多数据的话).
如果设定了filesize 参数,那么这个%U的置换变量就很有用,当一个文件满了之后,就会自动的产生下一个文件爱。
%U也有利于并行执行任务。因为并行的时候,需要多个文件。
虽然可以指定许多的文件参数,但是导出任务并不一定会用到所有的文件。导出任务会在任务末尾显示用到的文件,所以在导入的时候就可以只指定这些用过的文件。
限制:由于不会覆盖现存的文件,所以命名的时候应该注意。
例子:
F:/Temp>expdp test/test@crm93 dumpfile=3.dmp,4.dmp,5.dmp logfile=3.log
Export: Release 10.2.0.1.0 - Production on 星期三, 09 4月, 2008 16:15:52
Copyright (c) 2003, 2005, Oracle. All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
启动 "TEST"."SYS_EXPORT_SCHEMA_01": test/********@crm93 dumpfile=3.dmp,4.dmp,5.dmp logfile=3.log
正在使用 BLOCKS 方法进行估计...
处理对象类型 SCHEMA_EXPORT/TABLE/TABLE_DATA
使用 BLOCKS 方法的总估计: 192 KB
处理对象类型 SCHEMA_EXPORT/USER
处理对象类型 SCHEMA_EXPORT/SYSTEM_GRANT
处理对象类型 SCHEMA_EXPORT/ROLE_GRANT
处理对象类型 SCHEMA_EXPORT/DEFAULT_ROLE
处理对象类型 SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
处理对象类型 SCHEMA_EXPORT/TABLE/TABLE
处理对象类型 SCHEMA_EXPORT/TABLE/INDEX/INDEX
处理对象类型 SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
处理对象类型 SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
处理对象类型 SCHEMA_EXPORT/TABLE/COMMENT
. . 导出了 "TEST"."MYVIEWS" 104 KB 3670 行
已成功加载/卸载了主表 "TEST"."SYS_EXPORT_SCHEMA_01"
******************************************************************************
TEST.SYS_EXPORT_SCHEMA_01 的转储文件集为:
D:/ORACLE/PRODUCT/10.2.0/ADMIN/CRMII/DPDUMP/3.DMP
作业 "TEST"."SYS_EXPORT_SCHEMA_01" 已于 16:14:19 成功完成
从上面这个例子可以看出,dumpfile指定了三个文件,但是最终只有使用一个.到服务器上看也是如此,只有3.dmp文件是有数据de,,其它两个只有基础的格式信息.
例子2:使用%U
F:/Temp>expdp test/test@crm93 dumpfile=LZF%U.DMP content=data_only
Export: Release 10.2.0.1.0 - Production on 星期三, 09 4月, 2008 16:22:02
Copyright (c) 2003, 2005, Oracle. All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
启动 "TEST"."SYS_EXPORT_SCHEMA_01": test/********@crm93 dumpfile=LZF%U.DMP content=data_only
正在使用 BLOCKS 方法进行估计...
处理对象类型 SCHEMA_EXPORT/TABLE/TABLE_DATA
使用 BLOCKS 方法的总估计: 192 KB
. . 导出了 "TEST"."MYVIEWS" 104 KB 3670 行
已成功加载/卸载了主表 "TEST"."SYS_EXPORT_SCHEMA_01"
******************************************************************************
TEST.SYS_EXPORT_SCHEMA_01 的转储文件集为:
D:/ORACLE/PRODUCT/10.2.0/ADMIN/CRMII/DPDUMP/LZF01.DMP
作业 "TEST"."SYS_EXPORT_SCHEMA_01" 已于 16:20:10 成功完成
不巧的是,无法在服务器之外的设备上存储文件,举例来说,在windows下使用虚拟目录也是不行的.
1.2.6 ENCRYPTION_PASSWORD
格式:encryption_password=password
作用:设定一个用于加密表格数据的密码,可以对数据加密
说明: 必须同时设置透明的数据加密,这个选项才有效,有关内容参考oracle database advanced security administrator's guide .
限制:只对有加密的列其作用。本工具不提供对整个文件的加密。
通过网络的方式导出数据时,加密不起作用。对应的表格被跳过,并且显示错误信息,但是任务还是会继续进行。
原表的列加密属性和目的表的加密属性不一致,也会导致失败。
例子:略
1.2.7 ESTIMATE
格式:ESTIMATE={BLOCKS|STATISTICS}
作用:估计每个表格需要消耗多少的磁盘空间(以字节为单位).在日志和屏幕输出中都会体现出来.估计只是针对表格。
说明:参数为BLOCKS表示使用对象包含的数据块来计算,STATISTICS则表示使用统计数据来计算,所以用这个之前最好先执行analyze 函数.譬如 analyze table myviews compute statistics;
限制:如果存在压缩表,那么使用参数blocks的估计可能不准确,所以存在这种情况最好用statistics
例子:略
1.2.8 ESTIMATE_ONLY
格式:ESTIMATE_ONLY={Y|N}
作用:仅仅估计大小,但是不导出.
说明:如果不指定估计的方式,则默认用BLOCKS的方式,所以可以通过参数estimate=STATISTICS来指定估计方法。
限制:同ESTIMATE
例子:
F:/Temp>expdp test/test@crm93 content=data_only estimate_ONLY=Y ESTIMATE=STATISTICS NOLOGFILE=Y
Export: Release 10.2.0.1.0 - Production on 星期三, 09 4月, 2008 17:10:38
Copyright (c) 2003, 2005, Oracle. All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
启动 "TEST"."SYS_EXPORT_SCHEMA_01": test/********@crm93 content=data_only estimate_ONLY=Y ESTIMATE=STATISTICS NOLOGFILE=Y
正在使用 STATISTICS 方法进行估计...
处理对象类型 SCHEMA_EXPORT/TABLE/TABLE_DATA
. 预计为 "TEST"."MYVIEWS" 102.2 KB
使用 STATISTICS 方法的总估计: 102.2 KB
作业 "TEST"."SYS_EXPORT_SCHEMA_01" 已于 17:08:46 成功完成
1.2.9 EXCLUDE (排除)
格式:EXCLUDE=OBJECT_TYPE[:NAME_CLAUSE][,....]
作用:指定不要导出的对象的原数据。
说明:可以一次指定多个对象,或者一类对象,例如包裹,函数等等.
被排除的对象如果存在关联对象,那么关联的对象也不会被导出。例如某个表格被排除了那么相关的索引和触发器也不会被导出。
如果不跟name_cluase则表示排除一类。
name_clause必须是以双引号包起来,用单引号表示字符串,譬如TABLE:" LIKE 'MY%'" 。但是使用name_cluase暂时还内有试验成功的。
有三种需要特别说明的排除对象:constraint,grant,user
CONSTRAINTS
1)NOT NULL 不能被排除
2)需要用于建表的约束,例如iot中的主键,ref列中的ref scope和with rowid约束.这些也是不能被排除.
GRANTS和users
1)exclude=grant排除对象的授权以及系统权限授权.
2)exclude=user只会排除用户的定义,但是不会排除用户对应模式中的对象.
限制:不能和include一起使用,二者是互斥的。
例子: EXCLUDE=TABLE/" LIKE 'TCS%' /" (这是windows下的转义符号,尤其是中文的), 这个语法很混帐.
EXCLUDE=TABLE/" IN ('A','B','C') /"
1.2.10 FILESIZE
格式:FILESIZE=INTEGER[B|K|M|G] ,具体值只能是自然数.
作用:和DUMPFILE中的置换变量(%U)一起使用的时候才是有效的。
说明:用于设置每个文件的最大大小。
限制:最小的文件大小是data pump 块大小的10倍,也就是4k。这通过%U创建的文件就知道了.
例子:略
注意:在试验过程中出现“转储空间耗尽..."的提示,有点不是很明白,其次,每次执行之后都会产生以sys开头的文条件,这有点浪费空间.
1.2.11 FLASHBACK_SCN
格式: FLASHBACK_SCN=scn_value
作用:按照scn (快照号好备份数据)
说明:无
限制:不能和FLASHBACK_TIME一起使用
例子:略
1.2.12 FLASHBACK_TIME
格式:FLASHBACK_TIME="TO_TIMESTAMP(time-value)"
作用:按照快照时间来备份数据
说明:略
限制:同flashback_scn
例子:
DIRECTORY=dpump_dir1
DUMPFILE=hr_time.dmp
FLASHBACK_TIME="TO_TIMESTAMP('25-08-2003 14:35:00', 'DD-MM-YYYY HH24:MI:SS')"
1.2.13 FULL
格式:FULL=[Y|N]
作用:是否全部导出
说明:如果是Y,则必须有EXP_FULL_DATABASE的角色
限制:SYS, ORDSYS, EXFSYS, MDSYS, DMSYS, CTXSYS, ORDPLUGINS, LBACSYS, XDB,
SI_INFORMTN_SCHEMA, DIP, DBSNMP, and WMSYS这些模式的meta_data是不会被导出的。在sys上的授权是永远不会被导出的。
通常不要和其它的例如tables,schemas, 等混合使用。可以和content一起使用.
例子:略。
1.2.14 INCLUDE
格式:INCLUDE = object_type[:name_clause] [, ...]
作用:只导出包含的东西,这和exclude相反
说明:格式同exclude ,可以有多个include语句。可以通过查询DATABASE_EXPORT_OBJECTS, SCHEMA_EXPORT_OBJECTS, and TABLE_EXPORT_OBJECTS.来了解可用的object_type.
限制:不能和exclude混合用。在sys模式上的授权是不能被导出的。
例子: 略。
注意:遗憾的是,同exclude一样,Oracle自己例子中格式并不能执行,总是提示错误,是否是bug?
include=:table" in ('myviews') "
1.2.15 JOB_NAME
格式: job_name=jobname_String
作用:用于设置随后的导出任务,例如当attach参数用于连接一个任务,或者使用dba_datapump_jobs,user_datapump_jobs试图的时候。这个任务名称会成为当前用户模式下的主表的名称。主表用于控制导出任务。
说明:jobname_String最多可以有30个字符。如果要包含空格,则任务名称必须用单引号括起来(例如,'LOST DAY').
默认任务名称是系统产生的,格式为sys_export_<mode>_nn,NN是以01起始的数字串。
限制:无
例子:
F:/Temp>expdp test/test@ilovechina dumpfile=cat.dmp nologfile=y schemas=test job_name=lzf_test_01
Export: Release 10.2.0.1.0 - Production on 星期四, 17 4月, 2008 18:13:39
Copyright (c) 2003, 2005, Oracle. All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
启动 "TEST"."LZF_TEST_01": test/********@ilovechina dumpfile=cat.dmp nologfile=y schemas=test job_name=lzf_test_01
正在使用 BLOCKS 方法进行估计...
处理对象类型 SCHEMA_EXPORT/TABLE/TABLE_DATA
使用 BLOCKS 方法的总估计: 576 KB
.....
1.2.16 logfile
格式:LOGFILE=[directory_object:]file_name
作用:用于定义日志文件,是可选的。
说明:和dumpfile基本同,但是不能使用%U参数,其次如果存在同名的logfile是会自动覆盖的,而不会提示错误。
限制:无
例子:略
1.2.17 NETWORK_LINK
格式:NETWORK_LINK=source_database_link
作用:允许从一个用db_link标识的数据库导出数据
说明:(20080417暂停) ,20080421继续。 没有什么特别的。
如果源数据库是只读的,那么在源数据库上的用户必须拥有一个本地管理的表空间作为默认的临时表空间,否则作业会失败的。
限制:当本参数network_link和参数tables是连接在一起使用的,只能导出整个表格,分区导出是不行的。目前版本的pump只支持public,fixed-user,和connected-user类型的dblink,而current-user database link是不被支持的.
例子:
F:/Temp/Temp>expdp TEST/TEST@apexcrm_250 dumpfile=08042103.dmp nologfile=Y estimate=blocks tables=(HIRE.STUDENTS) network_link=l_HIRE
Export: Release 10.2.0.1.0 - Production on 星期一, 21 4月, 2008 18:18:47
Copyright (c) 2003, 2005, Oracle. All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
Starting "TEST"."SYS_EXPORT_TABLE_01": TEST/********@apexcrm_250 dumpfile=08042103.dmp nologfile=Y estimate=blocks tables=(HIRE.STUDENTS) network_link=l_HIRE
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
. estimated "HIRE"."STUDENTS" 128 KB
Total estimation using BLOCKS method: 128 KB
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
. . exported "HIRE"."STUDENTS" 10.90 KB 48 rows
Master table "TEST"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for TEST.SYS_EXPORT_TABLE_01 is:
D:/ORACLE/PRODUCT/10.2.0/ADMIN/APEXCRM/DPDUMP/08042103.DMP
Job "TEST"."SYS_EXPORT_TABLE_01" successfully completed at 07:55:53
1.2.19 nologfile 意思是不记录日志,具体略。 格式为nologfile=[Y|N]
1.2.20 PARALLEL
格式:PARALLEL=integer
作用:使得导出任务能够启动几个进程来执行导出,从而提高效率。
说明:使用这个选项会启动三种进程(Unix下):工作进程、I/o进程,控制进程。
需要注意的是,N必须等于用dumpfile设定的文件个数,或者如果你如果在dumpfile中制定%U参数也可以的。因为每个活动的工作进程或者I/O服务进程一次写一个文件,是以独占的方式完成的,如果文件数目不够会导致相反的结果.一些工作进程在等待文件(文件数目不够啊)的时候会处于空闲状态(不干任何事情,就是等),因此降低了整个任务的性能。更重要的是,对于那些I/O进程而言如果如法获得需要输出的文件,那么会导致ora-39035的异常,并停止导出。这两种情况都可以纠正过来,用DATA pump 工具连接到任务上,并使用add_file命令添加更多的文件(交互模式下,当然要先停止任务),并重新启动任务。(是不是说?)
限制:
例子:
F:/Temp/Temp>expdp test/test@ilovechina dumpfile=0804_%U.dmp nologfile=y tables=(myviews) parallel=3
Export: Release 10.2.0.1.0 - Production on 星期四, 24 4月, 2008 18:25:52
Copyright (c) 2003, 2005, Oracle. All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
启动 "TEST"."SYS_EXPORT_TABLE_01": test/********@ilovechina dumpfile=0804_%U.dmp nologfile=y tables=(myviews) parallel=
3
正在使用 BLOCKS 方法进行估计...
处理对象类型 TABLE_EXPORT/TABLE/TABLE_DATA
使用 BLOCKS 方法的总估计: 192 KB
. . 导出了 "TEST"."MYVIEWS" 104 KB 3670 行
处理对象类型 TABLE_EXPORT/TABLE/TABLE
处理对象类型 TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
已成功加载/卸载了主表 "TEST"."SYS_EXPORT_TABLE_01"
******************************************************************************
TEST.SYS_EXPORT_TABLE_01 的转储文件集为:
D:/ORACLE/PRODUCT/10.2.0/ADMIN/CRMII/DPDUMP/0804_01.DMP
D:/ORACLE/PRODUCT/10.2.0/ADMIN/CRMII/DPDUMP/0804_02.DMP
作业 "TEST"."SYS_EXPORT_TABLE_01" 已于 18:23:52 成功完成
1.2.21 parfile
格式:PARFILE=[directory_path]file_name
作用:方便命令输入
说明:无,仅仅是为了方便,但是我们都建议用这个,如果命令太长的话。
限制:无
例子:略
1.2.22 QUERY
格式:QUERY = [schema.][table_name:] query_clause
作用:只导出制定查询的数据集合
说明:无,最好和parfile结合使用,因为需要用单引号或者双引号把语句括起来,如果是在命令行在输入单引号和双引号会很麻烦的,需要添加不少的转义符。
限制:不能和以下参数组合使用 :CONTENT=METADATA_ONLY,ESTIMATE_ONLY,TRANSPORT_TABLESPACES
例子: 略
1.2.23 SAMPLE
格式:SAMPLE=[[schema_name.]table_name:]sample_percent
作用:用于抽样导出数据,按照百分比,可以介于schema,也可以基于table,也可以介于full database。如果直接使用sample=50%(例如),即表示导出整个数据库的50%数据。
说明:sample_percent取值范围=[.000001,100)
限制:无法用于网络传输,也就是无法用于dblink方式吧。
例子:(省略了cmd命令)
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
启动 "TEST"."SYS_EXPORT_TABLE_01": test/********@ilovechina dumpfile=testspace.dmp
tables=test_space sample=test.test_space:0.0001
正在使用 BLOCKS 方法进行估计...
处理对象类型 TABLE_EXPORT/TABLE/TABLE_DATA
使用 BLOCKS 方法的总估计: 152 MB
处理对象类型 TABLE_EXPORT/TABLE/TABLE
处理对象类型 TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
. . 导出了 "TEST"."TEST_SPACE" 5.398 KB 7 行
已成功加载/卸载了主表 "TEST"."SYS_EXPORT_TABLE_01"
******************************************************************************
TEST.SYS_EXPORT_TABLE_01 的转储文件集为:
D:/ORACLE/PRODUCT/10.2.0/ADMIN/CRMII/DPDUMP/TESTSPACE.DMP
作业 "TEST"."SYS_EXPORT_TABLE_01" 已于 17:33:28 成功完成
1.2.24 SCHEMAS
格式:SCHEMAS=schema_name [, ...]
作用:按照模式方式来导出对象
说明:
限制: :如果没有EXP_FULL_DATABASE角色,则只能用自己的schema
例子: 略
1.2.25 STATUS
格式:STATUS=[integer]
作用:按照特定间隔(秒)显示导出任务的状态
说明:默认参数是0,就是不显示信息,除了最后的总结信息。
限制: :
例子:略
1.2.26 TABLES
格式: TABLES=[schema_name.]table_name[:partition_name] [, ...]
作用:允许制定某个表格,或者制定导出某个表格的某个分区信息。
说明:表名允许使用通配符好,例如tables=test% .
限制:1)如果存在交叉引用,可能无法导出,例如一个定义在当前模式的trigger,其主表可能是另外一个模式 的,但是如果表格所在的模式没有被显式地申明,那么无法导出改trigger;2)在table模式中,type是不会被导出的,如果目标数据库中不存在定义表格所需要的type,那么导入的时候可能失败;3)无法导出dblink数据库上的分区;4)如果要加分区参数,那么不允许使用通配符来表达表名;5)不允许使用同义词。
例子:
1.2.27 TABLESPACES
格式:TABLESPACES=tablespace_name [, ...]
作用:按照表空间的方式导出对象
说明:可以设置多个。对于表格,只有有部分是在其中的也会被导出。
限制: :无
例子:略
1.2.28 TRANSPORT_FULL_CHECK
格式:TRANSPORT_FULL_CHECK={y | n}
作用:用于检测导出部分和非导出部分的关系。
说明:如果参数 =y,系统会确认二者是没有关系的,如果有关系,那么就会失败,这种检验对两个方面是同等要求的;如果是N,仅仅检查导出部分在非导出部门没有相关部分,这还是用例子说比较好说,譬如索引必须依赖表格,而表格不必要依赖索引,如果导出部分是表格,那么参数为N可以通过,如果是索引,那么是无法通过的。
必须和transport_tablespaces一起使用。
限制: :无
例子:略
1.2.29 TRANSPORT_TABLESPACES
格式:TRANSPORT_TABLESPACES=tablespace_name [, ...]
作用:进行一转换模式的导出。
说明:
限制: :无法重启该种任务;并行度只能是1(不能并行);必须要有EXP_FULL_DATABASE角色;只能导入到等级别或者更高级别数据库中。
例子:略
1.2.30 VERSION
格式:VERSION={COMPATIBLE | LATEST | version_string}
作用:创建一个符合特定版本的dump文件,改文件可以被用到当前版本之前的服务器上。例如10.2创建的可以用到10.1中去,或者是11g之后的可以用到10g上。
说明:只能够在10.1之后的版本用,因为从10.1开始才有expdmp,impdp命令。
COMPATITLE,这是默认的参数选项,这和数据库的compatibility level是一致的,必须设置为9.2或者9.2之后。latest ,就是当前数据库的版本。version_string ,具体的版本号,但是不能小于9.2(含)
限制: :如果当前对象所使用的一些关联对象的版本和设置的版本不符合,可能无法导出。例如一个表格用一个新的类型定义列,但是改类型在当前版本有,但是在之前的版本没有,如果version指定了之前的版本,那么改表格就无法导出。
例子:略
二,impdp
impdp的把部分命令和expdp 类似,所以不再对每个命令进行介绍了,下面只介绍它们之前的差异,和impdp的不同命令。
2.1 remap_datafile
格式:REMAP_DATAFILE=source_datafile:target_datafile
作用:为ddl语句修改datafile语句。在不同的操作系统平台之间移动数据库是比较有效的。
说明: 这些ddl也只限于CREATE TABLESPACE, CREATE LIBRARY, and CREATE DIRECTORY。此外当前用户必须具有IMP_FULL_DATABASE角色。第三文件名必须用单引号括起来,所以也建议使用parfile参数来操作。
限制:
例子:REMAP_DATAFILE='DB1$:[HRDATA.PAYROLL]tbs6.f':'/db1/hrdata/payroll/tbs6.f'
这个例子是从VMS操作系统转移到unix系统下。
2.2 REMAP_SCHEMA
格式:REMAP_SCHEMA=source_schema:target_schema
作用:重映射模式。
说明:1)可以有多个这样的句子,知识要求source_schema必须不同;2)这种映射可能不是百分百的,因为部分对象可能有一些关联,例如内部的一些过程可能引用到其它schema的内容;3)只要有足够的权限,即使目标schema不存在,也会自动创建,否则就要先人工建立。对于自动建立的,请用alter user语句修改新建user的密码.4)本参数实际基本同imp的fromuser touser语句.
限制:如果权限不够,那么只能把别的schema的对象倒到自己的schema。
例子:略。
2.3 remap_tablespace
格式:REMAP_TABLESPACE=source_tablespace:target_tablespace
作用:重新映射表空间
说明:1)同样地,也允许多个remap_tablespace语句,只不过source_tablespace必须不同而已。
2)这是个很不错的选择项目,提供到了tablespace级别的转换,有的时候类似于alter table move tablespace
限制:如果是用于转换的模式,则兼容模式必须是10.1或者之后的版本。
例子: 略
2.4 REUSE_DATAFILES
格式:REUSE_DATAFILES={y | n} ,默认值是n
作用:是否要用现存的数据文件来创建表空间.
说明:如果是n,那么遇到重复的文件,会提示错误,但是impdp工作会继续。如果是y,那么就不会报错误,但是可能会发生数据丢失的问题,因为这个选项会初始化存在的数据文件。
限制:无
例子:略
2.5 SKIP_UNUSABLE_INDEXES
格式:SKIP_UNUSABLE_INDEXES={y | n},默认值同系统参数SKIP_UNUSABLE_INDEXES,当然这指的是目标数据库中的参数。
作用:跳过不可用的索引。
说明:1)如果是参数值是n,如果存在异常的索引,那么就会可能无法导入表格或者表格的部分分区;2)如果是Y,那么就没有关系,会继续导入,好像索引不存在一样;3)只有当目标表格存在的时候,才有意义;4)如果不设置本参数,那么impdp会当作是默认值的情况处理;5)用于实现约束的索引如果是不可用的,那么数据是不会被导入的。
限制:无
例子:略
2.6 sqlfile
格式:SQLFILE=[directory_object:]file_name
作用:颇类似imp中的rows=n参数,用于产生ddl语句到一个文件中,并不真正执行Imp。
说明:如果存在同名文件,则会覆盖。
限制:无
例子:略
2.7 STREAMS_CONFIGURATION
格式:STREAMS_CONFIGURATION={y | n},默认值是y
作用:是否导入总体streams类型的元数据。
说明:无
限制:无
例子:略
2.8 TABLE_EXISTS_ACTION
格式:TABLE_EXISTS_ACTION={SKIP | APPEND | TRUNCATE | REPLACE}
默认是ship,但是如果content=data_only设置了,那么默认就是append.
作用:当遇到存在的表格时,impdp应该做什么。
说明:1)这是原来imp中所不具有的,或者是难于找到对应的,勉强有点象的是ignore=y|N;2)SKIP跳过,执行下一个表格的导入;append 增加到尾部;truncate,清空原来的再导入;replace,删除原来表格,再创建表格导入数据。2)在使用这些选项的时候,应该考虑一下以下各种情况:
■ 如果使用truncate和replace选项,那么请保证目标表格的数据没有被关联(例如作为别人关联外键)
■ 使用了SKIP, APPEND, or TRUNCATE选项时候,那么源表格相关对象(如indexes, grants, triggers, and constraints等)会被忽略。所以需要特别注意这个,不知道11g以后是如何考虑的。
■ 使用APPEND or TRUNCATE, 那么源表格的数据首先会被执行check动作,以便确认是否符合目标表格,然后才是执行其它动作。如果数据违反了约束和触发器,那么数据也不能被导入,一定要导入可以先禁止那些索引和触发器。
■如果用的是append选择项,那么总是使用新的空间来存放追加数据,所以导入后,最好还是压缩一下表格。
限制:簇表或者使用了dblink的情况下,不能使用TRUNCATE选项。
例子:略
2.9 TRANSFORM
格式:TRANSFORM = transform_name:value[:object_type]
作用:修改对象的ddl语句,这在有些情况下还是非常好用的,不必要调整的半死,而可以在Imp的时候一举完成。
说明:如果设置为N,那么有标记的部分就会变为不出现,创建表格的时候按照默认方式创建相应部分。
下图是对照表图(不好意思上传的时候不小心加了水印,本来这不是我搞的图):
限制:
例子:TRANSFORM=SEGMENT_ATTRIBUTES:n:table
2.10 TRANSPORT_DATAFILES
格式:TRANSPORT_DATAFILES=datafile_name
作用:用于转换模式下 指定新的数据文件,文件名称必须用单引号括起来
说明:建议用parfile参数处理
限制:
例子:TRANSPORT_DATAFILES='/user01/data/tbs1.f'
有必须要仔细检查一下。
2.11 TRANSPORT_FULL_CHECK
格式:TRANSPORT_FULL_CHECK={y | n} ,和expdp类似,模式值是n
作用:检验特定的表空间是否存在依赖性(相关性),并对存在相关性做出相应的处理。
说明:这种处理和expdp的check是类似的,基本可参看.
限制:
例子:略
2.12 TRANSPORT_TABLESPACES
格式:TRANSPORT_TABLESPACES=tablespace_name [, ...],和expdp类似
作用:基本同expdp的,具体略
说明:略
限制:略
例子:略
三,新旧工具的区别以及新工具的性能等等方面。
差别有的,除了新工具不能导出数据到本地之外,新工具还是比老工具灵活的,也显得更加专业,希望以后expdp可以增加转到本地来的选项.否则操作上老是要访问数据库服务器的操作系统。
3.1 DATA PUMP的性能提升方面
1)可有多个进程的并行机制,以直接路径的流方式同时装载或者下载表。
2)对于非常大的表格和分区,单个的进程可以选择内部分区并行机制,以多个并行查询结合多个DML I/O服务进程结合的方式进行操作(就是处理外部表的方式)。
3) 使用并行机制来建立索引和包体,还是并行。
4) 是在服务器上直接读写的(省略了很多网络操作还有其它一些耗费cpu的过程,所以这也就是为什么一直只能限制使用direcotry object的缘故)。
5)文件的存储格式是 direct path API内部流格式。而这种格式和oracle数据文件的格式非常像,因此不需要进行客户端INSERT语句的转换(不是非常明白)?
6) 更好的存储方法:直接路径和外表存取(direct path /external tables),比常规的sql来得快。直接路径提供了最快的单数据流性能,而外表方式有效地利用了数据库并行查询和并行dml操作能力。
7)在导出过程中,元数据和数据的抽取过程是可以交替进行的。这个的意思大概是两者的导出是可以分离的,不需要一个依赖另外一个,而以前的过程需要先元数据再数据。
3.2 性能调整
DATA PUMP技术完全地利用可利用的资源来最大化吞吐量,最小化任务的时间。为了达到这个目的,一个系统必须在CPU,内容,I/O方面进行很好的平衡处理。此外,标准的性能调整规则也应该使用到。例如,为了最好的性能,数据文件应该存放在不同的磁盘上,因为进程会并行读写这些文件。同样地,源表空间或者目标表空间应该是位于不同的磁盘上(这样才能有效地利用到并行i/o的性能)。
3.3 控制资源的消耗
DATA PUMP工具允许我们动态调整任务的资源消耗(增加或者减少),这是通过parallel参数来控制的。为了最大化吞吐量,应该只给每个CPU分配两个工作进程。
当我们提高了并行度的时候,CPU,内存,I/O带宽的使用也提升了。我们必须确保这些系统资源是够用的,只要有必要,应该把文件分散到不同磁盘或者通道上以便获得更好的i/o带宽。
为了最大化并行机制,至少必须给每个并行度提供一个文件,这样做最简单的办法就是使用文件统配符号%U.当然这些都取决于你的磁盘配置(例如单个的,非条带磁盘),你应该不会希望把所有的文件放在同个磁盘上。即使有很快的CPU和很快的磁盘,CPU和磁盘之间的通道依然可能成为并行机制的约束因素。
PARALLEL参数只能在企业版中使用。
3.4 和data pump性能有关的初始化参数
以下三个参数值建议如下设置:
■ DISK_ASYNCH_IO=TRUE 磁盘异步i/o
■ DB_BLOCK_CHECKING=FALSE 执行数据块检查
■ DB_BLOCK_CHECKSUM=FALSE 执行数据块校验
而下面三个参数也应该设置足够大的指来保证最大的并行机制(是显而易见的):
■ PROCESSES 进程
■ SESSIONS 会话
■ PARALLEL_MAX_SERVERS 并行的最大服务
此外SHARED_POOL_SIZE和UNDO_TABLESPACE的初始化参数值也应该是比较大的。
3.5 在数据流环境下设置缓冲区的大小
在10g r2中,如果使用了流的功能,但是STREAMS_POOL_SIZE初始化参数没有定义,那么流缓冲池的大小默认是共享池的10%。
所以应该适当设置STREAMS_POOL_SIZE的大小,让然不应该超过db_cache_size的大小。
附录:原文,一个简单的使用api执行导出的例子,附带例外处理
DECLARE
ind NUMBER; -- Loop index
spos NUMBER; -- String starting position
slen NUMBER; -- String length for output
h1 NUMBER; -- Data Pump job handle
percent_done NUMBER; -- Percentage of job complete
job_state VARCHAR2(30); -- To keep track of job state
le ku$_LogEntry; -- For WIP and error messages
js ku$_JobStatus; -- The job status from get_status
jd ku$_JobDesc; -- The job description from get_status
sts ku$_Status; -- The status object returned by get_status
BEGIN
-- Create a (user-named) Data Pump job to do a schema export.
h1 := dbms_datapump.open('EXPORT','SCHEMA',NULL,'EXAMPLE3','LATEST');
-- Specify a single dump file for the job (using the handle just returned)
-- and a directory object, which must already be defined and accessible
-- to the user running this procedure.
dbms_datapump.add_file(h1,'example3.dmp','DMPDIR');
-- A metadata filter is used to specify the schema that will be exported.
dbms_datapump.metadata_filter(h1,'SCHEMA_EXPR','IN (''HR'')');
-- Start the job. An exception will be returned if something is not set up
-- properly.One possible exception that will be handled differently is the
-- success_with_info exception. success_with_info means the job started
-- successfully, but more information is available through get_status about
-- conditions around the start_job that the user might want to be aware of.
begin
dbms_datapump.start_job(h1);
dbms_output.put_line('Data Pump job started successfully');
exception
when others then
if sqlcode = dbms_datapump.success_with_info_num
then
dbms_output.put_line('Data Pump job started with info available:');
dbms_datapump.get_status(h1,
dbms_datapump.ku$_status_job_error,0,
job_state,sts);
if (bitand(sts.mask,dbms_datapump.ku$_status_job_error) != 0)
then
le := sts.error;
if le is not null
then
ind := le.FIRST;
while ind is not null loop
Examples of Using the Data Pump API
The Data Pump API 5-9
dbms_output.put_line(le(ind).LogText);
ind := le.NEXT(ind);
end loop;
end if;
end if;
else
raise;
end if;
end;
-- The export job should now be running. In the following loop, we will monitor
-- the job until it completes. In the meantime, progress information is
-- displayed.
percent_done := 0;
job_state := 'UNDEFINED';
while (job_state != 'COMPLETED') and (job_state != 'STOPPED') loop
dbms_datapump.get_status(h1,
dbms_datapump.ku$_status_job_error +
dbms_datapump.ku$_status_job_status +
dbms_datapump.ku$_status_wip,-1,job_state,sts);
js := sts.job_status;
-- If the percentage done changed, display the new value.
if js.percent_done != percent_done
then
dbms_output.put_line('*** Job percent done = ' ||
to_char(js.percent_done));
percent_done := js.percent_done;
end if;
-- Display any work-in-progress (WIP) or error messages that were received for
-- the job.
if (bitand(sts.mask,dbms_datapump.ku$_status_wip) != 0)
then
le := sts.wip;
else
if (bitand(sts.mask,dbms_datapump.ku$_status_job_error) != 0)
then
le := sts.error;
else
le := null;
end if;
end if;
if le is not null
then
ind := le.FIRST;
while ind is not null loop
dbms_output.put_line(le(ind).LogText);
ind := le.NEXT(ind);
end loop;
end if;
end loop;
-- Indicate that the job finished and detach from it.
dbms_output.put_line('Job has completed');
dbms_output.put_line('Final job state = ' || job_state);
Examples of Using the Data Pump API
5-10 Oracle Database Utilities
dbms_datapump.detach(h1);
-- Any exceptions that propagated to this point will be captured. The
-- details will be retrieved from get_status and displayed.
exception
when others then
dbms_output.put_line('Exception in Data Pump job');
dbms_datapump.get_status(h1,dbms_datapump.ku$_status_job_error,0,
job_state,sts);
if (bitand(sts.mask,dbms_datapump.ku$_status_job_error) != 0)
then
le := sts.error;
if le is not null
then
ind := le.FIRST;
while ind is not null loop
spos := 1;
slen := length(le(ind).LogText);
if slen > 255
then
slen := 255;
end if;
while slen > 0 loop
dbms_output.put_line(substr(le(ind).LogText,spos,slen));
spos := spos + 255;
slen := length(le(ind).LogText) + 1 - spos;
end loop;
ind := le.NEXT(ind);
end loop;
end if;
end if;
END;
关于Datapump的实际使用.
简单的就不说了.
1)例子一,解决老式dump莫名奇妙的问题.
有个数据库有有SCHEMA=TEST ,其中有几十张巨大的表格,需要占用空间几十G空间,现在需要在笔记本电脑上部署学习环境,但是资源明显不够,只需要METADATA,不需要数据.但是使用exp,不知道如何控制,metadata中也会保留着无用的参数,例如分配极其不合理的空间:
EXP user/pwd file=test.dmp owner=test rows=n indexes=y grants=y
然后导入,但是无论如何,都会建立一个10几个G的文件,很是浪费时间.也许有的人说,用脚本来不是很好吗? 是的,这个建议不错,但是我们这个项目比较糟糕的是,居然没有及时更新的pdm,所以最快的方式应该是exp,imp的方式. 可是现在这样的话,也是很不合理的.明明没有数据,而分配了巨大的空间.
如果使用expdp,impdp就可以解决,不但完美,而且速度也很快!
expdp user/pwd dumpfile=test.dmp schemas=test content=metadata_only
如果有test用户存在,可以先drop掉.
impdb user/pwd dumpfile=test.dmp schemas=test
如果schemas test不存在,那么就创建schema test,和用户test,并导入test的所有对象,非常的好.