分类: Oracle
2015-11-10 23:27:55
原文地址:expdp和impdp的用法 作者:icybay
ORCALE10G提供了新的导入导出工具,数据泵。
Oracle官方对此的形容是:OracleDataPump technology enables Very High-Speed
movement of data and metadata from one database to another.其中Very
High-Speed是亮点。
先说数据泵提供的主要特性(包括,但不限于):
1. 支持并行处理导入、导出任务
2.
支持暂停和重启动导入、导出任务
3. 支持通过Database Link的方式导出或导入远端数据库中的对象
4.
支持在导入时通过Remap_schema、Remap_datafile、Remap_tablespace几个参数实现导入过程中自动修改对象属主、
数据文件或数据所在表空间。
5.
导入/导出时提供了非常细粒度的对象控制。通过Include、Exclude两个参数,甚至可以详细制定是否包含或不包含某个对象。
Warning:
1. 什么是Directory对象
Directory对象是Oracle10g版本提供的一个新功能。他是一个
指向,指向了操作系统中的一个路径。每个Directory都包含
Read,Write两个权限,可以通过Grant命令授权给指定的用户或角色。拥有读写权限的用户就可以读写该Directory对象指定的操作系统路
径下的文件。
2. 无论在什么地方使用expdp,生成的文件最终页是在服务器上(Directory指定的位置)
如何调用
1. 命令行方式
最简单的调用,但是写的参数有限,建议使用参数文件的方式。
2. 参数文件方式
最常用的方式。通常需要先编写一个参数文件。指定导出时需要的各种参数。然后以如下方式调用。
expdp
user/pwd parfile=xxx.par
这个xxx.par即是我们编辑的参数文件。注意,在这个命令行后面,同样可以再跟别的参数,
甚至是在par参数文件中指定过的参数。如果执行命令中附加
的参数与参数文件中的参数有重复,最终采用哪个参数,会以参数最后出现的位置而定。如:expdp user/pwd parfile=xxx.par
logfile=a.log,如果在参数文件中也指定了logfile,这里会以命令行中的logfile为准;如:expdp user/pwd
logfile=a.log parfile=xxx.par,而这个,则会以参数文件中的为准,因为parfile=xxx.par写在命令行的后面。
3. 交互方式
Data
Pump导入导出任务支持停止,重启等状态操作。如用户执行导入或者导出任务,执行了一半时,使用Crtl+C中断了任务(或其他原因导致的中断),此时
任务并不是被取消,而是被转移到后台。可以再次使用expdp/impdp命令,附加attach参数的方式重新连接到中断的任务中,并选择后续的操作。
这就是交互方式。
Warning : 什么是attach参数,每执行一个导入,或者导出,在命令的第一行,会有以下信息:Starting
“BAM”.”SYS_EXPORT_SCHEMA_01″: bam/********
parfile=expdp_tbs.par,这个SYS_EXPORT_SCHEMA_01就是我们的attach参数。
-bash-3.00$
expdp bam/bam parfile=expdp_tbs.par
Export: Release 10.2.0.4.0 – 64bit Production on Friday, 13 August, 2010 16:35:18
Copyright (c) 2003, 2007, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release
10.2.0.4.0 – 64bit Production
With the Partitioning, OLAP, Data
Mining and Real Application Testing options
Starting
“BAM”.”SYS_EXPORT_SCHEMA_01″: bam/******** parfile=expdp_tbs.par
如果想
使用交互方式,可以使用如:expdp attach SYS_EXPORT_SCHEMA_01 进入到交互模式
操作模式
1. 全库模式
导入或者导出整个数据库,对应impdp/expdp命令中的full参数,只有拥有dba或者
exp_full_database和imp_full_database权限的用户才能执行。
2. Schema模式
导出或导入Schema下的自有对象,对应impdp/expdp命令中的Schema参数,这是默认的操作模式。
如果拥有dba或者
exp_full_database和imp_full_database权限的用户执行的话,就可以导出或导入多个Schema中的对象。
3. 表模式
导出指定的表或者表分区(如果有分区的话)以及依赖该表的对象(如该表的索引,约束等,不过前提是这些对象在同一个
Schema中,或者执行的用户有相应的权限)。对应impdp/expdp命令中的Table参数。
4. 表空间模式
导出指定的表空间中的内容。对应impdp/expdp中的Tablespaces参数,这种模式类似于表模式和
Schema模式的补充。
5. 传输表空间模式
对应impdp/expdp中的Transport_tablespaces参数。这种模式与前面几种模式最显著的区
别是生成的Dump文件中并不包含具
体的逻辑数据,而只导出相关对象的元数据(即对象的定义,可以理解成表的创建语句),逻辑数据仍然在表空间的数据文件中,导出时需要将元数据和数据文件同
时复制到目标端服务器。
这种导出方式效率很高,时间开销主要是花在复制数据文件产生的I/O上。expdp执行传输表空间模式的导出,用户必须
拥有
exp_full_database角色或者DBA角色。而通过传输表空间模式导入时,用户必须拥有imp_full_database角色或者DBA角
色。
过滤数据
过滤数据主要依赖于Query和Sample两个参数。其中Sample参数主要针对expdp导出功能。
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.999999,语法如下:
Sample=[[Schema_name.]Table_name:]sample_percent
指
定该参数以后,EXPDP导出将自动控制导出的记录量,如导出A表中50%的记录,设置的Sample参数如下:
Sample=A:50
Warning:
Sample_percent指定的值只是一个参考值,EXPDP会根据数据量算出一个近似值。
过滤对象
过滤对象主要依赖于Include和Exclude两个参数。这两个参数作用正好相反,在这两个参数中,可以指定你知道的任何对象
类型(如:Package、Procedure、Table等等)或者对象名称(支持通配符)
1. Exclude 反规则
指定不被包含的对象类型或者对象名称。指定了该参数以后,指定的对象类型对应的所有对象都不会被导入或导出。
如果被排除的对象有依赖的对象,那么其依赖的
对象也不会被导入或导出。如:通过Exclude参数指定不导出表对象的话,不仅指定的表不会被导出,连这些表关联的Index、Check等都不会被导
出。语法如下:
Exclude=object_type[:name_clause][, ...]
Warning:
Exclude参数支持同时指定多个参数值,如:不导入A表的索引,也不导入B表的约束(假设A表的索引以idx_a开头,B表的约束以chk_b开
头),连所有的授权都不想导入,那么Exclude参数设置如下:
Exclude=Index:”like ‘idx_a%’”,
Constraint:”like ‘chk_b%’”, Grant
Warning:
建议把Exclude参数放入到参数文件中使用,以避免转义符带来的麻烦。
2. Include 正规则
与Exclude正好相反。指定包含的对象类型或者对象名称。
Warning:
由于两个参数功能正好相反,因此在执行导入或导出命令时,两个参数不能同时使用,否则Oracle也不知道你想要干什么啦。
高级过滤
在导出/导入的时候,我们常常有这样的需求,只想导出/导入表结构,或者只想导出/导入数据。幸运的是数据泵也提供了该功能。使用
Content参数。该参数有三个属性
1) ALL : 导出/导入对象定义和数据,该参数的默认值就是ALL
2) DATA_ONLY
: 只导出/导入数据。
3) METADATA_ONLY : 只导出/导入对象定义。
Warning: 有一点值得注意的时,在执行导出的时候,如果使用了高级过滤,如只导出了数据,那么导入时,需要确保数据定义已经存在。否则数据都变成没有主子了。如果数 据定义已经存在,导入时最好指定data_only,否则会触发ORA-39151错误,因为对象已经存在了。
过滤已经存在的数据
我们知道,导入的表对象在目标库中已经存在,并且目标端没有创建数据完整性约束条件(RI)来检验数据的话,就有可能造
成数据被重复导入。数据泵提供了一
个新的参数Table_exists_action,可以一定程度上降低重复数据的产生。该参数用来控制如果要导入的表对象存在,执行什么操作。有以下几
个参数值:
1) SKIP :
跳过该表,继续处理下一个对象。该参数默认就是SKIP。值得注意的是,如果你同时指定了CONTENT参数为Data_only的话,SKIP参数无
效,默认为APPEND。
2) APPEND : 向现有的表中添加数据。
3) TRUNCATE :
TRUNCATE当前表,然后再添加记录。使用这个参数需要谨慎,除非确认当前表中的数据确实无用。否则可能造成数据丢失。
4) REPLACE
: 删除并重建表对象,然后再向其中添加数据。值得注意的是,如果同时指定了CONTENT参数为Data_only的话,REPLACE参数无效。
重定义表的Schema或表空间
我们还可能会遇到这样的需求,把A用户的对象转移到B用户,或者更换数据的表空间。数据泵通过
Remap_Schema和Remap_tablespace参数实现了该功能。
1) 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,a:c.
2) REMAP_TABLESPACE : 重定义对象所在的表空间。
该参数用来重映射导入对象存储的表空间,支持同时对多个表空间进行
转换,相互间用逗号分割。语法如下:
REMAP_TABLESPACE=Source_tablespace:Target_tablespace[,Source_tablespace:Target_tablespace]
Warning:
如果使用Remap_tablespace参数,则要保证导入的用户对目标表空间有读写权限。
优化导入/导出效率
对于大数据量来说,我们不得不考虑效率问题。数据泵对效率也提出了更高的要求。甚至官方的描述就是Oracle
Data Pump technology enables Very High-Speed movement of data and
metadata from one database to another.这里的Very High-Speed依赖我们的parallel参数。
所
有的优化操作都会有三种结果:变得更好、没有变化、变得更差。Parallel参数也是这样,并不是指定一个大于1的参数,性能就会有提升。
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
2) 对于导入的parallel
对于导入来说,使用parallel参数则要简单的多,我认为导入更能体现parallel参数的优势。
参数设置为几,则认为同时将几张表的内容导入到库中。
举例:某dmp文件中包含了200张表,我们尝试在导入该DMP文件时指定并行度为10,则
语法如下:
$ impdp user/pwd directory=dump_file
dumpfile=expdp_20100820.dmp logfile=impdp_20100820.log parallel=10
执行导出
1. 如何起步
前面介绍了一些基本知识,现在我们来试试如何操作吧。
举例如下:从10.1.133.98服务器
上,将除数据之外的所有信息导入到10.1.133.88数据库中。
1) 创建一个Directory对象,并授予用户读写权限。
SQL>
create directory dump_file as ‘/home/oracle/backup’;
Directory created.
SQL> grant read,write on directory dump_file to bam;
Grant succeeded.
如上,生成的DMP文件将会放在/home/oracle/backup目录下。
2) 编写一个导出的参数文件。
-bash-3.00$ vi expdp_tbs.par
DIRECTORY=DUMP_FILE
DUMPFILE=expdp_bamdb2bamtest.dmp
LOGFILE=expdp_bamdb2bamtest.log
CONTENT=METADATA_ONLY
如
上,指定了生成的dmp文件名以及日志名(这些都会被放在/home/oracle/backup下),以及导出模式为:metadata_only–只
导出结构,不包含数据。
3) 执行导出命令
-bash-3.00$ expdp bam/bam parfile=expdp_tbs.par
Export: Release 10.2.0.4.0 – 64bit Production on Friday, 13 August, 2010 16:35:18
Copyright (c) 2003, 2007, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release
10.2.0.4.0 – 64bit Production
With the Partitioning, OLAP, Data
Mining and Real Application Testing options
Starting
“BAM”.”SYS_EXPORT_SCHEMA_01″: bam/******** parfile=expdp_tbs.par
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/TABLESPACE_QUOTA
Processing object type
SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type
SCHEMA_EXPORT/TYPE/TYPE_SPEC
Processing object type
SCHEMA_EXPORT/SEQUENCE/SEQUENCE
Processing object type
SCHEMA_EXPORT/TABLE/TABLE
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
Processing
object type SCHEMA_EXPORT/TABLE/COMMENT
Processing object type
SCHEMA_EXPORT/FUNCTION/FUNCTION
Processing object type
SCHEMA_EXPORT/PROCEDURE/PROCEDURE
Processing object type
SCHEMA_EXPORT/FUNCTION/ALTER_FUNCTION
Processing object type
SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE
Processing object type
SCHEMA_EXPORT/VIEW/VIEW
Processing object type
SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Processing object type
SCHEMA_EXPORT/TABLE/INDEX/FUNCTIONAL_AND_BITMAP/INDEX
Processing
object type
SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/FUNCTIONAL_AND_BITMAP/INDEX_STATISTICS
Processing
object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing
object type SCHEMA_EXPORT/JOB
Master table
“BAM”.”SYS_EXPORT_SCHEMA_01″ successfully loaded/unloaded
******************************************************************************
Dump
file set for BAM.SYS_EXPORT_SCHEMA_01 is:
/home/oracle/backup/expdp_bamdb2bamtest.dmp
Job
“BAM”.”SYS_EXPORT_SCHEMA_01″ successfully completed at 16:41:26
4) 将文件传输到10.1.133.88机器上。
-bash-3.00$ ftp 10.1.133.88
Connected
to 10.1.133.88.
220 BNM-TEST2 FTPserverready.
Name
(10.1.133.88:oracle): oracle
331 Password required for oracle.
Password:
230
User oracle logged in.
Remote system type is UNIX.
Using binary
mode to transfer files.
ftp> bin
200 Type set to I.
ftp>
put /home/oracle/backup/expdp_bamdb2bamtest.dmp
/export/app22/backup/expdp_bamdb2bamtest.dmp
200 PORT command
successful.
150 Opening BINARY mode data connection for
/export/app22/backup/expdp_bamdb2bamtest.dmp.
226 Transfer complete.
local:
/home/oracle/backup/expdp_bamdb2bamtest.dmp remote:
/export/app22/backup/expdp_bamdb2bamtest.dmp
125329408 bytes sent in
1.4 seconds (89551.55 Kbytes/s)
ftp> bye
221-You have
transferred 125329408 bytes in 1 files.
221-Total traffic for this
session was 125329890 bytes in 1 transfers.
221-Thank you for using
the FTP service on BNM-TEST2.
221 Goodbye.
5) 执行导入
-bash-3.00$ impdp bam/bam directory=dump_file
dumpfile=expdp_bamdb2bamtest.dmp logfile=expdp_bamdb2bamtest.log
table_exists_action=replace
Import: Release 10.2.0.4.0 – 64bit Production on Friday, 13 August, 2010 16:44:51
Copyright (c) 2003, 2007, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release
10.2.0.4.0 – 64bit Production
With the Partitioning, OLAP, Data
Mining and Real Application Testing options
Master table
“BAM”.”SYS_IMPORT_FULL_01″ successfully loaded/unloaded
Starting
“BAM”.”SYS_IMPORT_FULL_01″: bam/******** directory=dump_file
dumpfile=expdp_bamdb2bamtest.dmp logfile=expdp_bamdb2bamtest.log
table_exists_action=replace
Processing object type SCHEMA_EXPORT/USER
ORA-31684:
Object type USER:”BAM” already exists
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/TABLESPACE_QUOTA
Processing object type
SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type
SCHEMA_EXPORT/TYPE/TYPE_SPEC
Processing object type
SCHEMA_EXPORT/SEQUENCE/SEQUENCE
Processing object type
SCHEMA_EXPORT/TABLE/TABLE
…
6) 如何进入交互模式
在这里,我正在执行导入,我想进入交互模式,查看导入的状态。进入交互模式有两种方式,操作步骤如下:
i
使用Ctrl+C退出当前模式
ii
在命令行模式下,执行Expdp/Impdp命令,同时指定attach参数连接到当前正在制定的导入/导出任务。如:
expdp
bam/bam attach=SYS_IMPORT_FULL_01
Warning:如果没有指定Attach参数,则默认进入当前正在运行的
任务。不过如果当前没有正在指定的任务,而且也没有给Attach赋值,那么就会报Ora-31626错误。
当命令行进入交互模式后,会显示如下
界面:
Export>
7) 交互模式的操作
在交互模式中,支持下面几种操作。
i 查看JOB的运行状态
Export>
status
ii 回退到命令行
Export> continue_client
iii 增加并行
Export>
parallel=4
Warning:
在使用导出时,不能直接指定parallel参数,否则可能会遇到ORA-39095错误,因为如果要并行导出,则必须指定多个导出文件,这里的并行导出
是指,多个线程同时工作,同时从数据库中导出多个dmp文件来。
在Oracle Database Utilities中有如下解释:
Because
each active worker process or I/O server process writes exclusively to
one file at a time, an insufficient number of files can have adverse
effects. Some of the worker processes will be idle while waiting for
files, thereby degrading the overall performance of the job. More
importantly, if any member of a cooperating group of parallel I/O server
processes cannot obtain a file for output, then the export operation
will be stopped with an ORA-39095 error. Both situations can be
corrected by attaching to the job using the Data Pump Export utility,
adding more files using the ADD_FILE command while in interactive mode,
and in the case of a stopped job, restarting the job.
You can supply multiple file_name specifications as a comma-delimited list or in separate DUMPFILE parameter specifications. If no extension is given for the filename, then Export uses the default file extension of .dmp. The filenames can contain a substitution variable (%U), which implies that multiple files may be generated. The substitution variable is expanded in the resulting filenames into a 2-digit, fixed-width, incrementing integer starting at 01 and ending at 99. If a file specification contains two substitution variables, both are incremented at the same time. For example, exp%Uaa%U.dmp would resolve to exp01aa01.dmp, exp02aa02.dmp, and so forth.
iv 停止JOB
Export> stop_job
v 启动JOB
Export> start_job
vi
杀掉JOB
Export> kill_job
vii 退出交互模式
Export> exit_client
viii
指定文件大小
Export> filesize=1G
ix 帮助
Export> Help
************************************************************************************************************************************************************************************************************************
expdp介绍
EXPDP命令行选项
1. ATTACH
该选项用于在客户会话与已存在导出作用之间建立关联.语法如下
ATTACH=[schema_name.]job_name
Schema_name
用于指定方案名,job_name用于指定导出作业名.注意,如果使用ATTACH选项,在命令行除了连接字符串和ATTACH选项外,不能指定任何其他
选项,示例如下:
Expdp scott/tiger ATTACH=scott.export_job
2. CONTENT
该
选项用于指定要导出的内容.默认值为ALL
CONTENT={ALL | DATA_ONLY | METADATA_ONLY}
当设置
CONTENT为ALL时,将导出对象定义及其所有数据.为DATA_ONLY时,只导出对象数据,为METADATA_ONLY时,只导出对象定义
Expdp
scott/tiger DIRECTORY=dump DUMPFILE=a.dump CONTENT=METADATA_ONLY
3.
DIRECTORY
指定转储文件和日志文件所在的目录
DIRECTORY=directory_object
Directory_object
用于指定目录对象名称.需要注意,目录对象是使用CREATE DIRECTORY语句建立的对象,而不是OS目录
Expdp
scott/tiger DIRECTORY=dump DUMPFILE=a.dump
4. DUMPFILE
用于指定转储文
件的名称,默认名称为expdat.dmp
DUMPFILE=[directory_object:]file_name [,….]
Directory_object
用于指定目录对象名,file_name用于指定转储文件名.需要注意,如果不指定directory_object,导出工具会自动使用
DIRECTORY选项指定的目录对象
Expdp scott/tiger DIRECTORY=dump1
DUMPFILE=dump2:a.dmp
5. ESTIMATE
指定估算被导出表所占用磁盘空间分方法.默认值是BLOCKS
ESTIMATE={BLOCKS
| STATISTICS}
设置为BLOCKS时,oracle会按照目标对象所占用的数据块个数乘以数据块尺寸估算对象占用的空间,设置为
STATISTICS时,根据最近统计值估算对象占用空间
Expdp scott/tiger TABLES=emp
ESTIMATE=STATISTICS DIRECTORY=dump DUMPFILE=a.dump
6.
ESTIMATE_ONLY
指定是否只估算导出作业所占用的磁盘空间,默认值为N
EXTIMATE_ONLY={Y | N}
设
置为Y时,导出作用只估算对象所占用的磁盘空间,而不会执行导出作业,为N时,不仅估算对象所占用的磁盘空间,还会执行导出操作.
Expdp
scott/tiger ESTIMATE_ONLY=y NOLOGFILE=y
7.
EXCLUDE(具体见2、Exclude导出用户中指定类型的指定对象)
该选项用于指定执行操作时释放要排除对象类型或相关对象
EXCLUDE=object_type[:name_clause]
[,….]
Object_type用于指定要排除的对象类型,name_clause用于指定要排除的具体对象.EXCLUDE和
INCLUDE不能同时使用
Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dup
EXCLUDE=VIEW
8. FILESIZE
指定导出文件的最大尺寸,默认为0,(表示文件尺寸没有限制)
9.
FLASHBACK_SCN
指定导出特定SCN时刻的表数据
FLASHBACK_SCN=scn_value
Scn_value
用于标识SCN值.FLASHBACK_SCN和FLASHBACK_TIME不能同时使用
Expdp scott/tiger
DIRECTORY=dump DUMPFILE=a.dmp FLASHBACK_SCN=358523
10.
FLASHBACK_TIME
指定导出特定时间点的表数据
FLASHBACK_TIME=”TO_TIMESTAMP(time_value)”
Expdp
scott/tiger DIRECTORY=dump DUMPFILE=a.dmp
FLASHBACK_TIME=“TO_TIMESTAMP(’25-08-2004 14:35:00’,’DD-MM-YYYY
HH24:MI:SS’)”
11. FULL
指定数据库模式导出,默认为N
FULL={Y | N}
为Y时,标
识执行数据库导出.
12. HELP
指定是否显示EXPDP命令行选项的帮助信息,默认为N
当设置为Y时,会显示导出选
项的帮助信息.
Expdp help=y
13. INCLUDE(具体见1、Include导出用户中指定类型的指定对象)
指
定导出时要包含的对象类型及相关对象
INCLUDE = object_type[:name_clause] [,… ]
14.
JOB_NAME
指定要导出作用的名称,默认为SYS_XXX
JOB_NAME=jobname_string
SELECT *
FROM DBA_DATAPUMP_JOBS;--查看存在的job
15. LOGFILE
指定导出日志文件文件的名称,默
认名称为export.log
LOGFILE=[directory_object:]file_name
Directory_object
用于指定目录对象名称,file_name用于指定导出日志文件名.如果不指定directory_object.导出作用会自动使用DIRECTORY
的相应选项值.
Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp logfile=a.log
16.
NETWORK_LINK
指定数据库链名,如果要将远程数据库对象导出到本地例程的转储文件中,必须设置该选项.
如:expdp
gwm/gwm directory=dir_dp NETWORK_LINK=igisdb tables=p_street_area
dumpfile =p_street_area.dmp logfile=p_street_area.log
job_name=my_job
igisdb是目的数据库与源数据的链接名,
dir_dp是目的数据库上的目录
而如果直接用使用
连接字符串(@fgisdb),expdp属于服务端工具,expdp生成的文件默认是存放在服务端的
17. NOLOGFILE
该
选项用于指定禁止生成导出日志文件,默认值为N.
18. PARALLEL
指定执行导出操作的并行进程个数,默认值为1
注:
并行度设置不应该超过CPU数的2倍,如果cpu为2个,可将PARALLEL设为2,在导入时速度比PARALLEL为1要快
而对于导出的文件,如果PARALLEL设为2,导出文件只有一个,导出速度提高不多,因为导出都是到同一个文件,会争抢资源。所以可以设置导出文件为两
个,如下所示:
expdp gwm/gwm directory=d_test
dumpfile=gwmfile1.dp,gwmfile2.dp parallel=2
19. PARFILE
指定导出参数
文件的名称
PARFILE=[directory_path] file_name
20. QUERY
用于指定过滤导出
数据的where条件
QUERY=[schema.] [table_name:] query_clause
Schema用于指定方案
名,table_name用于指定表名,query_clause用于指定条件限制子句.QUERY选项不能与
CONNECT=METADATA_ONLY,EXTIMATE_ONLY,TRANSPORT_TABLESPACES等选项同时使用.
Expdp
scott/tiger directory=dump dumpfile=a.dmp Tables=emp query=’WHERE
deptno=20’
21. SCHEMAS
该方案用于指定执行方案模式导出,默认为当前用户方案.
22.
STATUS
指定显示导出作用进程的详细状态,默认值为0
23. TABLES
指定表模式导出
TABLES=[schema_name.]table_name[:partition_name][,…]
Schema_name
用于指定方案名,table_name用于指定导出的表名,partition_name用于指定要导出的分区名.
24.
TABLESPACES
指定要导出表空间列表
25. TRANSPORT_FULL_CHECK
该选项用于指定被搬移表
空间和未搬移表空间关联关系的检查方式,默认为N.
当设置为Y时,导出作用会检查表空间直接的完整关联关系,如果表空间所在表空间或其索引所在的
表空间只有一个表空间被搬移,将显示错误信息.当设置为N时,导出作用只检查单端依赖,如果搬移索引所在表空间,但未搬移表所在表空间,将显示出错信息,
如果搬移表所在表空间,未搬移索引所在表空间,则不会显示错误信息.
26. TRANSPORT_TABLESPACES
指定执
行表空间模式导出
27. VERSION
指定被导出对象的数据库版本,默认值为COMPATIBLE.
VERSION={COMPATIBLE
| LATEST | version_string}
为COMPATIBLE时,会根据初始化参数COMPATIBLE生成对象元数据;为
LATEST时,会根据数据库的实际版本生成对象元数据.version_string用于指定数据库版本字符串.调用EXPDP
数据泵工具导出的步骤:
1、创建DIRECTORY
create directory dir_dp as 'D:\oracle\dir_dp';
2、
授权
Grant read,write on directory dir_dp to lttfm;
--查看目录及权限
SELECT
privilege, directory_name, DIRECTORY_PATH FROM user_tab_privs t,
all_directories d
WHERE t.table_name(+) = d.directory_name ORDER BY
2, 1;
3、执行导出
expdp lttfm/lttfm@fgisdb schemas=lttfm
directory=dir_dp dumpfile =expdp_test1.dmp logfile=expdp_test1.log;
连
接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1
With the
Partitioning, OLAP and Data Mining options
启动
"LTTFM"."SYS_EXPORT_SCHEMA_01": lttfm/********@fgisdb sch
ory=dir_dp
dumpfile =expdp_test1.dmp logfile=expdp_test1.log; */
备注:
1、directory=dir_dp必须放在前面,如果将其放置最后,会提示 ORA-39002: 操作无效
ORA-39070: 无法打开日志文件。
ORA-39087: 目录名 DATA_PUMP_DIR; 无效
2、在导出过程中,DATA DUMP 创建并使用了一个名为SYS_EXPORT_SCHEMA_01的对象,此对象就是DATA
DUMP导出过程中所用的JOB名字,如果在执行这个命令时如果没有指定导出的JOB名字那么就会产生一个默认的JOB名字,如果在导出过程中指定JOB
名字就为以指定名字出现
如下改成:
expdp lttfm/lttfm@fgisdb schemas=lttfm
directory=dir_dp dumpfile =expdp_test1.dmp
logfile=expdp_test1.log,job_name=my_job1;
3、导出语句后面不要有分号,否则如上的导出语句中的job表名为‘my_job1;’,而不是my_job1。因此导致expdp
lttfm/lttfm attach=lttfm.my_job1执行该命令时一直提示找不到job表
4、创建的目录一定要在数据库所在的机器上。否则也是提示:
导出
的相关命令使用:
1)Ctrl+C组合键:在执行过程中,可以按Ctrl+C组合键退出当前交互模式,退出之后,导出操作不会停止
2)Export>
status --查看当前JOB的状态及相关信息
3)Export>
stop_job --暂停JOB(暂停job后会退出expor模式)
4)重新进入export模式下:C:\Documents and Settings\Administrator>expdp
lttfm/lttfm attach=lttfm.my_job1 --语句后面不带分号
5)Export>
start_job --打开暂停的JOB(并未开始重新执行)
6)Export>
continue_client --通过此命令重新启动 "LTTFM"."MY_JOB":
7)Export>
kill_job --取消当前的JOB并释放相关客户会话(将job删除同时删除dmp文件)
8)Export> exit_client --通过此命令退出export模式(通过4)可再进入export模式下)
注:
导出完成后job自动卸载
数据泵导出的各种模式:
1、按表模式导出:
expdp lttfm/lttfm@fgisdb
tables=lttfm.b$i_exch_info,lttfm.b$i_manhole_info dumpfile
=expdp_test2.dmp logfile=expdp_test2.log directory=dir_dp
job_name=my_job
2、按查询条件导出:
expdp lttfm/lttfm@fgisdb
tables=lttfm.b$i_exch_info dumpfile =expdp_test3.dmp
logfile=expdp_test3.log directory=dir_dp job_name=my_job query='"where
rownum<11"'
3、按表空间导出:
Expdp lttfm/lttfm@fgisdb
dumpfile=expdp_tablespace.dmp tablespaces=GCOMM.DBF
logfile=expdp_tablespace.log directory=dir_dp job_name=my_job
4、导
出方案
Expdp lttfm/lttfm DIRECTORY=dir_dp DUMPFILE=schema.dmp
SCHEMAS=lttfm,gwm
5、导出整个数据库:
expdp lttfm/lttfm@fgisdb dumpfile
=full.dmp full=y logfile=full.log directory=dir_dp job_name=my_job
使用exclude,include导出数据
1、Include导出
用户中指定类型的指定对象
--仅导出lttfm用户下以B开头的所有表,包含与表相关的索引,备注等。不包含过程等其它对象类型:
expdp
lttfm/lttfm@fgisdb dumpfile=include_1.dmp logfile=include_1.log
directory=dir_dp job_name=my_job include=TABLE:\"LIKE \'B%\'\"
--
导出lttfm用户下排除B$开头的所有表:
expdp lttfm/lttfm@fgisdb schemas=lttfm
dumpfile=include_1.dmp logfile=include_1.log directory=dir_dp
job_name=my_job include=TABLE:\"NOT LIKE \'B$%\'\"
--仅导出lttfm用
户下的所有存储过程:
expdp lttfm/lttfm@fgisdb schemas=lttfm
dumpfile=include_1.dmp logfile=include_1.log directory=dir_dp
job_name=my_job include=PROCEDURE;
2、Exclude导出用户中指定类型的指定对象
--
导出lttfm用户下除TABLE类型以外的所有对象,如果表不导出那么与表相关的索引,约束等与表有关联的对象类型也不会被导出:
expdp
lttfm/lttfm@fgisdb schemas=lttfm dumpfile=exclude_1.dmp
logfile=exclude_1.log directory=dir_dp job_name=my_job exclude=TABLE;
--
导出lttfm用户下排除B$开头的所有表:
expdp lttfm/lttfm@fgisdb dumpfile=include_1.dmp
logfile=include_1.log directory=dir_dp job_name=my_job
exclude=TABLE:\"LIKE\'b$%\'\";
--导出lttfm用户下的所有对象,但是对于表类型只导出以
b$开头的表:
expdp lttfm/lttfm@fgisdb dumpfile=include_1.dmp
logfile=include_1.log directory=dir_dp job_name=my_job
exclude=TABLE:\"NOT LIKE \'b$%\'\";
IMPDP介绍
IMPDP命令行选项与EXPDP有很多相同的,不同的有:
1、REMAP_DATAFILE
该选项用于将源数据文件名转变为目标数据文件名,在不同平
台之间搬移表空间时可能需要该选项.
REMAP_DATAFIEL=source_datafie:target_datafile
2、
REMAP_SCHEMA
该选项用于将源方案的所有对象装载到目标方案中.
REMAP_SCHEMA=source_schema:target_schema
3、
REMAP_TABLESPACE
将源表空间的所有对象导入到目标表空间中
REMAP_TABLESPACE=source_tablespace:target:tablespace
4、
REUSE_DATAFILES
该选项指定建立表空间时是否覆盖已存在的数据文件.默认为N
REUSE_DATAFIELS={Y |
N}
5、SKIP_UNUSABLE_INDEXES
指定导入是是否跳过不可使用的索引,默认为N
6、
SQLFILE
指定将导入要指定的索引DDL操作写入到SQL脚本中
SQLFILE=[directory_object:]file_name
Impdp
scott/tiger DIRECTORY=dump DUMPFILE=tab.dmp SQLFILE=a.sql
7、
STREAMS_CONFIGURATION
指定是否导入流元数据(Stream Matadata),默认值为Y.
8、
TABLE_EXISTS_ACTION
该选项用于指定当表已经存在时导入作业要执行的操作,默认为SKIP
TABBLE_EXISTS_ACTION={SKIP
| APPEND | TRUNCATE | FRPLACE }
当设置该选项为SKIP时,导入作业会跳过已存在表处理下一个对象;当设置为
APPEND时,会追加数据,为TRUNCATE时,导入作业会截断表,然后为其追加新数据;当设置为REPLACE时,导入作业会删除已存在表,重建表
病追加数据,注意,TRUNCATE选项不适用与簇表和NETWORK_LINK选项
9、TRANSFORM
该选项用于指定是否
修改建立对象的DDL语句
TRANSFORM=transform_name:value[:object_type]
Transform_name
用于指定转换名,其中SEGMENT_ATTRIBUTES用于标识段属性(物理属性,存储属性,表空间,日志等信息),STORAGE用于标识段存储属
性,VALUE用于指定是否包含段属性或段存储属性,object_type用于指定对象类型.
Impdp scott/tiger
directory=dump dumpfile=tab.dmp Transform=segment_attributes:n:table
10、
TRANSPORT_DATAFILES
该选项用于指定搬移空间时要被导入到目标数据库的数据文件
TRANSPORT_DATAFILE=datafile_name
Datafile_name
用于指定被复制到目标数据库的数据文件
Impdp system/manager DIRECTORY=dump
DUMPFILE=tts.dmp
TRANSPORT_DATAFILES=’/user01/data/tbs1.f’调用IMPDP
impdp导入模式:
1、按表导入
p_street_area.dmp文件中的表,此文件是以gwm用户按schemas=gwm导出的:
impdp
gwm/gwm@fgisdb dumpfile =p_street_area.dmp
logfile=imp_p_street_area.log directory=dir_dp tables=p_street_area
job_name=my_job
2、按用户导入(可以将用户信息直接导入,即如果用户信息不存在的情况下也可以直接导入)
impdp
gwm/gwm@fgisdb schemas=gwm dumpfile =expdp_test.dmp
logfile=expdp_test.log directory=dir_dp job_name=my_job
3、不通过
expdp的步骤生成dmp文件而直接导入的方法:
--从源数据库中向目标数据库导入表p_street_area
impdp
gwm/gwm directory=dir_dp NETWORK_LINK=igisdb tables=p_street_area
logfile=p_street_area.log job_name=my_job
igisdb是目的数据库与源数据的链接
名,dir_dp是目的数据库上的目录
4、更换表空间
采用remap_tablespace参数
--导出gwm用户下的所有数据
expdp system/orcl directory=data_pump_dir
dumpfile=gwm.dmp SCHEMAS=gwm
注:如果是用sys用户导出的用户数据,包括用户创建、授权部分,用自身用户导出则不
含这些内容
--以下是将gwm用户下的数据全部导入到表空间gcomm(原来为gmapdata表空间下)下
impdp
system/orcl directory=data_pump_dir dumpfile=gwm.dmp
remap_tablespace=gmapdata:gcomm
exp与imp
exp的关键字说明:
关键字 说明 (默认值)
------------------------------
USERID
用户名/口令
BUFFER 数据缓冲区大小
FILE 输出文件
(EXPDAT.DMP)
COMPRESS 导入到一个区 (Y)
GRANTS 导出权限
(Y)
INDEXES 导出索引 (Y)
DIRECT 直接路径 (N)
--直接导出速度较快
LOG 屏幕输出的日志文件
ROWS 导出数据行
(Y)
CONSISTENT 交叉表的一致性 (N)
FULL 导出整个文件 (N)
OWNER
所有者用户名列表
TABLES 表名列表
RECORDLENGTH IO记录的长度
INCTYPE
增量导出类型
RECORD 跟踪增量导出 (Y)
TRIGGERS 导出触发器 (Y)
STATISTICS
分析对象 (ESTIMATE)
PARFILE 参数文件名
CONSTRAINTS 导出的约束条件 (Y)
OBJECT_CONSISTENT
只在对象导出期间设置为只读的事务处理 (N)
FEEDBACK 每 x 行显示进度 (0)
FILESIZE
每个转储文件的最大大小
FLASHBACK_SCN 用于将会话快照设置回以前状态的 SCN
FLASHBACK_TIME
用于获取最接近指定时间的 SCN 的时间
QUERY 用于导出表的子集的 select 子句
RESUMABLE
遇到与空格相关的错误时挂起 (N)
RESUMABLE_NAME 用于标识可恢复语句的文本字符串
RESUMABLE_TIMEOUT
RESUMABLE 的等待时间
TTS_FULL_CHECK 对 TTS 执行完整或部分相关性检查
TABLESPACES
要导出的表空间列表
TRANSPORT_TABLESPACE 导出可传输的表空间元数据 (N)
TEMPLATE
调用 iAS 模式导出的模板名
常用的exp关键字
1、
full用于导出整个数据库,在rows=n一起使用,导出整个数据库的结构。
如:exp userid=gwm/gwm
file=/test.dmp log=test.log full=y rows=n direct=y
2、OWNER和TABLES,用于定
义exp导出的对象
如:exp userid=gwm/gwm file=/test.dmp log=test.log
owner=gwm table=(table1,table2)
3、buffer和feedback 若导出数据较大,考虑使用这两个参数。
如:exp userid=gwm/gwm file=/test.dmp log=test.log feedback=10000
buffer=100000000 tables=(table1,table2)
4、file和log 用于指定备份的dmp名称和log名称
5、
compress 不压缩导出数据的内容,默认y
6、filesize 若导出的数据文件大,应该用该参数,限制文件大小不要超过2g
如:exp userid=gwm/gwm file=/test1,test2,test3,test4,test5 filesize=2G
log=test.log
这样将创建test1.dmp,test2.dmp等,每个文件大小为2g。
imp关键字说明
关
键字 说明 (默认值) 关键字 说明 (默认值)
-------------------------------------------------------------
USERID
用户名/口令 FULL 导入整个文件 (N)
BUFFER 数据缓冲区大小
FROMUSER 所有者用户名列表
FILE 输入文件 (EXPDAT.DMP) TOUSER 用户名列表
SHOW
只列出文件内容 (N) TABLES 表名列表
IGNORE 忽略创建错误 (N)
RECORDLENGTH IO 记录的长度
GRANTS 导入权限 (Y) INCTYPE 增量导入类型
INDEXES
导入索引 (Y) COMMIT 提交数组插入 (N)
ROWS 导入数据行 (Y)
PARFILE 参数文件名
LOG 屏幕输出的日志文件 CONSTRAINTS 导入限制 (Y)
DESTROY
覆盖表空间数据文件 (N)
INDEXFILE 将表/索引信息写入指定的文件
SKIP_UNUSABLE_INDEXES
跳过不可用索引的维护 (N)
FEEDBACK 每 x 行显示进度 (0)
TOID_NOVALIDATE
跳过指定类型 ID 的验证
FILESIZE 每个转储文件的最大大小
STATISTICS
始终导入预计算的统计信息
RESUMABLE 在遇到有关空间的错误时挂起 (N)
RESUMABLE_NAME
用来标识可恢复语句的文本字符串
RESUMABLE_TIMEOUT RESUMABLE 的等待时间
COMPILE
编译过程, 程序包和函数 (Y)
STREAMS_CONFIGURATION 导入流的一般元数据 (Y)
STREAMS_INSTANTIATION
导入流实例化元数据 (N)
下列关键字仅用于可传输的表空间
TRANSPORT_TABLESPACE
导入可传输的表空间元数据 (N)
TABLESPACES 将要传输到数据库的表空间
DATAFILES 将要传输到数据库的数据文件
TTS_OWNERS
拥有可传输表空间集中数据的用户