http://www.itpub.net/thread-1618110-1-1.html
一、expdp使用简介
1.1 expdp数据文件存储介绍
使用EXPDP工具时,其转储文件只能被存放在DIRECTORY对象对应的OS目录中,而不能直接指定转储文件所在的OS目录.因此使用EXPDP工具时,必须首先建立DIRECTORY对象.并且需要为数据库用户授予使用DIRECTORY对象权限。
1.2 建DIRECTORY路径
SQL> conn /as sysdba
SQL> CREATE OR REPLACE DIRECTORY dir_dump AS '/u01/backup/';
SQL> GRANT read,write ON DIRECTORY dir_dump TO public;
二、导出类型
2.1 导出scott整个schema(默认导出登陆账号的schema)
$ expdp scott/tiger@db_esuite parfile=/orahome/expdp.par
expdp.par内容:
DIRECTORY=dir_dump
DUMPFILE=scott_full.dmp
LOGFILE=scott_full.log
2.2 其他账号登陆,在参数中指定schemas
$ expdp system/oracle@db_esuite parfile=/orahome/expdp.par
expdp.par内容:
DIRECTORY=dir_dump
DUMPFILE=scott_full.dmp
LOGFILE=scott_full.log
SCHEMAS=SCOTT
2.3 导出scott下的dept和emp表
$ expdp scott/tiger@db_esuite parfile=/orahome/expdp.par
expdp.par内容:
DIRECTORY=dir_dump
DUMPFILE=scott.dmp
LOGFILE=scott.log
TABLES=DEPT,EMP
2.4 导出scott下除emp之外的表
$ expdp scott/tiger@db_esuite parfile=/orahome/expdp.par
expdp.par内容:
DIRECTORY=dir_dump
DUMPFILE=scott.dmp
LOGFILE=scott.log
EXCLUDE=TABLE:"='EMP'"
2.5 导出scott下的存储过程
$ expdp scott/tiger@db_esuite parfile=/orahome/expdp.par
expdp.par内容:
DIRECTORY=dir_dump
DUMPFILE=scott.dmp
LOGFILE=scott.log
INCLUDE=PROCEDURE
2.6 导出scott下以'E'开头的表
$ expdp scott/tiger@db_esuite parfile=/orahome/expdp.par
expdp.par内容:
DIRECTORY=dir_dump
DUMPFILE=scott.dmp
LOGFILE=scott.log
INCLUDE=TABLE:"LIKE 'E%'" ---可以改成NOT LIKE,就导出不以E开头的表
2.7 带QUERY导出
$ expdp scott/tiger@db_esuite parfile=/orahome/expdp.par
expdp.par内容:
DIRECTORY=dir_dump
DUMPFILE=scott.dmp
LOGFILE=scott.log
TABLES=EMP,DEPT
QUERY=EMP:"where empno>=8000"
QUERY=DEPT:"where deptno>=10 and deptno<=40"
注:带查询的多表导出,如果多表之间有外健关联,需要注意查询条件所筛选的数据是否符合这样的外健约束,比如 EMP中有一栏位是 deptno,是关联dept中的主键,如果"where empno>=8000"中得出的deptno=50的话,那你的dept的条件"where deptno>=10 and deptno<=40"就不包含deptno=50的数据,在导入的时候就会报错。
三、expdp选项
3.1 ATTACH
该选项用于在客户会话与已存在导出作业之间建立关联。语法如下:
ATTACH=[schema_name.]job_name
schema_name用于指定方案名,job_name用于指定导出作业名。如果使用ATTACH选项,在命令行除了连接字符串和ATTACH选项外,不能指定任何其他选项,示例如下:
expdp scott/tiger ATTACH=scott.export_job
3.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.3 DIRECTORY
指定转储文件和日志文件所在的目录。语法如下:
DIRECTORY=directory_object
directory_object用于指定目录对象名称。目录对象是使用CREATE DIRECTORY语句建立的对象,而不是OS 目录,示例如下:
expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dump
建立目录:
SQL> CREATE DIRECTORY dump as 'd:\dump';
查询创建了那些子目录:
SQL> SELECT * FROM dba_directories;
3.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
3.5 ESTIMATE
指定估算被导出表所占用磁盘空间的方法。默认值是BLOCKS。语法如下:
EXTIMATE={BLOCKS | STATISTICS}
设置为BLOCKS时,oracle会按照目标对象所占用的数据块个数乘以数据块尺寸估算对象占用的空间,设置为STATISTICS时,根据最近统计值估算对象占用空间,示例如下:
expdp scott/tiger TABLES=emp ESTIMATE=STATISTICS DIRECTORY=dump DUMPFILE=a.dump
一般情况下,当用默认值(blocks)时,日志中估计的文件大小会比实际expdp出来的文件大,用statistics时会跟实际大小差不多。
3.6 EXTIMATE_ONLY
指定是否只估算导出作业所占用的磁盘空间,默认值为N。语法如下:
EXTIMATE_ONLY={Y | N}
设置为Y时,导出作业只估算对象所占用的磁盘空间,而不会执行导出作业,为N时,不仅估算对象所占用的磁盘空间,还会执行导出操作,示例如下:
expdp scott/tiger ESTIMATE_ONLY=y NOLOGFILE=y
3.7 EXCLUDE
该选项用于指定执行操作时要排除的对象类型或相关对象。语法如下:
EXCLUDE=object_type[:name_clause][,….]
object_type用于指定要排除的对象类型,name_clause用于指定要排除的具体对象.EXCLUDE和INCLUDE不能同时使用,示例如下:
expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dup EXCLUDE=VIEW
在EXPDP的帮助文件中,可以看到存在EXCLUDE和INCLUDE参数,这两个参数文档中介绍的命令格式存在问题,正确用法是:
EXCLUDE=OBJECT_TYPE[:name_clause][,...]
INCLUDE=OBJECT_TYPE[:name_clause][,...]
示例:
expdp <other_parameters> schema=scott exclude=sequence,table:"in('EMP','DEPT')"
impdp <other_parameters> schema=scott include=function,package,procedure,table:"='EMP'"
有了这些还不够,由于命令中包含了多个特殊字符,在不同的操作系统下需要通过转义字符才能使上面的命令顺利执行,如:EXCLUDE=TABLE:\"IN('BIGTALE')\"。
3.8 FILESIZE
指定导出文件的最大尺寸,默认为0(表示文件尺寸没有限制)。
3.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
3.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')"
3.11 FULL
指定数据库模式导出,默认为N。语法如下:
FULL={Y | N}
为Y时,标识执行数据库导出。
3.12 HELP
指定是否显示EXPDP命令行选项的帮助信息,默认为N。当设置为Y时,会显示导出选项的帮助信息,示例如下: expdp help=y。
3.13 INCLUDE
指定导出时要包含的对象类型及相关对象。语法如下:
INCLUDE=object_type[:name_clause][,… ]
示例如下:
expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp INCLUDE=trigger
3.14 JOB_NAME
指定要导出作业的名称,默认为SYS_XXX。语法如下:
JOB_NAME=jobname_string
示例如下:
expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp INCLUDE=trigger JOB_NAME=exp_trigger
后面想临时停止expdp任务时可以按Ctrl+C组合键,退出当前交互模式,退出之后导出操作不会停止,这不同于Oracle以前的EXP。以前的EXP,如果退出交互式模式,就会出错终止导出任务。在 Oracle10g中,由于EXPDP是数据库内部定义的任务,已经与客户端无关,退出交互之后,会进入export的命令行模式,此时支持 status等查看命令:
Export> status
如果想停止改任务,可以发出stop_job命令:
Export> stop_job
如果有命令行提示: "是否确实要停止此作业([Y]/N):" 或 "Are you sure you wish to stop this job ([yes]/no):",回答应是yes或者no,回答是YES以后会退出当前的export界面。接下来可以通过命令行再次连接到这个任务:
expdp test/test@acf attach=expfull
通过start_job命令重新启动导出:
Export> start_job
Export> status
3.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
3.16 NETWORK_LINK
指定数据库链名,如果要将远程数据库对象导出到本地例程的转储文件中,必须设置该选项。expdp中使用连接字符串和network_link的区别:
expdp属于服务端工具,而exp属于客户端工具,expdp生成的文件默认是存放在服务端的,而exp生成的文件是存放在客户端。
expdp username/password@connect_string ,对于使用这种格式来说,directory使用源数据库创建的,生成的文件存放在服务端。如何将生成的文件放在目标数据库而不放在源数据库?在expdp中使用network_link。 比如在本机expdp远程服务器的数据库,先在本机创建到服务端的dblink,然后创建directory及授权,然后expdp。
a) 创建到服务端的dblink
SQL> conn aa/aacc
SQL> create database link … connect to bb identified by password using '…';
b) 建立directory
SQL> conn / as sysdba
SQL> create or replace directory dir as 'directory';
SQL> grant read,write on directory dir to bb;
c) 通过network_link导出
expdp aa/aacc directory=dir network_link=link_name ...
3.17 NOLOGFILE
该选项用于指定禁止生成导出日志文件,默认值为N。
3.18 PARALLEL
指定导出操作的并行进程个数,默认值为1。该选项值要根据服务器的CPU个数而定。
3.19 PARFILE
指定导出参数文件的名称。语法如下:
PARFILE=[directory_path:]file_name
3.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 dumpfiel=a.dmp Tables=emp query='WHERE deptno=20'
3.21 SCHEMAS
该方案用于指定执行方案模式导出,默认为当前用户方案。
3.22 STATUS
指定显示导出作用进程的详细状态,默认值为0。
3.23 TABLES
指定表模式导出。语法如下:
TABLES=[schema_name.]table_name[artition_name][,…]
schema_name用于指定方案名,table_name用于指定导出的表名,partition_name用于指定要导出的分区名。
3.24 TABLESPACES
指定要导出表空间列表。
3.25 TRANSPORT_FULL_CHECK
该选项用于指定被搬移表空间和未搬移表空间关联关系的检查方式,默认为N。当设置为Y时,导出作业会检查表空间直接的完整关联关系,如果表所在表空间或其索引所在的表空间只有一个表空间被搬移,将显示错误信息。当设置为N时,导出作用只检查单端依赖,如果搬移索引所在表空间,但未搬移表所在表空间,将显示出错信息,如果搬移表所在表空间,未搬移索引所在表空间,则不会显示错误信息。
3.26 TRANSPORT_TABLESPACES
指定执行表空间模式导出。
3.27 VERSION
指定被导出对象的数据库版本,默认值为COMPATIBLE。语法如下:
VERSION={COMPATIBLE | LATEST | version_string}
为COMPATIBLE时,会根据初始化参数COMPATIBLE生成对象元数据;为LATEST时,会根据数据库的实际版本生成对象元数据;version_string用于指定数据库版本字符串。
四、导入类型
4.1 导入表
impdp scott/tiger DIRECTORY=dump_dir DUMPFILE=tab.dmp TABLES=dept,emp
impdp system/manager DIRECTORY=dump_dir DUMPFILE=tab.dmp TABLES=scott.dept,scott.emp REMAP_SCHEMA=SCOTT:SYSTEM
第一种方法表示将DEPT和EMP表导入到SCOTT方案中,第二种方法表示将DEPT和EMP表导入SYSTEM用户下。注意,如果要将表导入到其他方案中,必须指定REMAP_SCHEMA选项。
4.2 导入方案
impdp scott/tiger DIRECTORY=dump_dir DUMPFILE=schema.dmp SCHEMAS=scott
impdp system/manager DIRECTORY=dump_dir DUMPFILE=schema.dmp SCHEMAS=scott REMAP_SCHEMA=scott:system
4.3 导入表空间
impdp system/manager DIRECTORY=dump_dir DUMPFILE=tablespace.dmp TABLESPACES=user01
4.4 导入数据库
impdp system/manager DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=y
4.5 通过DBLINK的方式直接从远程数据库导入数据
4.5.1 创建Directory
SQL> connect u_test/xxx
SQL> !mkdir /u02/backup
SQL> create or replace directory dir_dpdump as '/u02/backup';
4.5.2 创建DBLINK
SQL> create database link ESUITE.NET connect to u_test identified by "xxx" using '…';
SQL> select count(*) from tab@ESUITE.NET;
4.5.3 利用IMPDP导入数据
$ impdp 'u_test/"xxx"' SCHEMAS=(u_test) directory=dir_dpdump network_link="ESUITE.NET" logfile=impdp.log
$ impdp 'u_test/"xxx"' TABLES=LOG_RECORD_DETAIL_20090422 directory=dir_dpdump network_link="ESUITE.NET"
4.6 实例
SQL> conn /as sysdba
SQL> CREATE OR REPLACE DIRECTORY dir_dump AS '/u01/backup/';
SQL> GRANT read,write ON DIRECTORY dir_dump TO public;
SQL> grant connect,resource to trial_wending identified by 'xxx';
SQL> CREATE TABLESPACE WENDING_LOG01 DATAFILE '/orahome/oradata/WENDING/wending_log01.dbf' SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;
SQL> CREATE TABLESPACE WENDING_USER01 DATAFILE '/orahome/oradata/WENDING/wending_user01.dbf' SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;
SQL> CREATE TABLESPACE WENDING_INDEX01 DATAFILE '/orahome/oradata/WENDING/wending_index01.dbf' SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;
注意,如果导入的用户下的过程或同义词用到了数据库连接,先把数据库链接给建上,否则导入这些对象时会很慢。
impdp u_test/xxx directory=dir_dump dumpfile=trial_wending_20081217.dp schemas=trial_wending ---从全备份中提取
impdp cat/passwd directory=dir_dump dumpfile=cat.dmp schemas=cat logfile=impcatr.log ---从自身导出的方案中导入
五、impdp选项
IMPDP命令行选项与EXPDP有很多相同的,如下:
5.1 REMAP_DATAFILE
该选项用于将源数据文件名转变为目标数据文件名,在不同平台之间搬移表空间时可能需要该选项:
REMAP_DATAFIEL=source_datafie:target_datafile
5.2 REMAP_SCHEMA
该选项用于将源方案的所有对象装载到目标方案中:
REMAP_SCHEMA=source_schema:target_schema
5.3 REMAP_TABLESPACE
将源表空间的所有对象导入到目标表空间中:
REMAP_TABLESPACE=source_tablespace:target_tablespace
5.4 REUSE_DATAFILES
该选项指定建立表空间时是否覆盖已存在的数据文件,默认为N:
REUSE_DATAFIELS={Y | N}
5.5 SKIP_UNUSABLE_INDEXES
指定导入是是否跳过不可使用的索引,默认为N。
5.6 SQLFILE指定将导入要指定的索引DDL操作写入到SQL脚本中.
SQLFILE=[directory_object:]file_name
impdp scott/tiger DIRECTORY=dump DUMPFILE=tab.dmp SQLFILE=a.sql
5.7 STREAMS_CONFIGURATION
指定是否导入流元数据(Stream Matadata),默认值为Y。
5.8 TABLE_EXISTS_ACTION
该选项用于指定当表已经存在时导入作业要执行的操作,默认为SKIP。
TABBLE_EXISTS_ACTION={SKIP | APPEND | TRUNCATE | REPLACE }
当设置该选项为SKIP时,导入作业会跳过已存在表处理下一个对象; 当设置为APPEND时,会追加数据; 为TRUNCATE时,导入作业会截断表,然后为其追加新数据; 当设置为REPLACE时,导入作业会删除已存在表,重建表并追加数据。
注意:TRUNCATE选项不适用与簇表和NETWORK_LINK选项。
5.9 TRANSFORM
该选项用于指定是否修改建立对象的DDL语句:
TRANSFORM=transform_name:value[bject_type]
transform_name用于指定转换名,其中SEGMENT_ATTRIBUTES用于标识段属性(物理属性/存储属性/表空间/日志等信息),STORAGE用于标识段存储属性; VALUE用于指定是否包含段属性或段存储属性; object_type用于指定对象类型。
impdp scott/tiger directory=dump dumpfile=tab.dmp transform=segment_attributes:n:table
5.10 TRANSPORT_DATAFILES
该选项用于指定搬移空间时要被导入到目标数据库的数据文件。
TRANSPORT_DATAFILE=datafile_name
datafile_name用于指定被复制到目标数据库的数据文件.
impdp system/manager DIRECTORY=dump DUMPFILE=tts.dmp TRANSPORT_DATAFILES='/user01/data/tbs1.f'
六、EXPDP和IMPDP
Oracle Database 10g引入了最新的数据泵(Data Dump)技术,使DBA或开发人员可以将数据库元数据(对象定义)和数据快速移动到另一个oracle数据库中。
6.1 数据泵导出导入(EXPDP和IMPDP)的作用
l 实现逻辑备份和逻辑恢复。
l 在数据库用户之间移动对象。
l 在数据库之间移动对象。
l 实现表空间搬移。
6.2 数据泵导出导入与传统导出导入的区别
在10g之前,传统的导出和导入分别使用EXP工具和IMP工具,从10g开始,不仅保留了原有的EXP和IMP工具,还提供了数据泵导出导入工具EXPDP和IMPDP。使用EXPDP和IMPDP时应该注意的事项:
EXP和IMP是客户段工具,既可以在客户端使用,也可以在服务端使用。
EXPDP和IMPDP是服务端的工具,只能在ORACLE服务端使用,不能在客户端使用。
IMP只适用于EXP导出文件,不适用于EXPDP导出文件;IMPDP只适用于EXPDP导出文件,而不适用于EXP导出文件。
七、备份脚本
7.1 windows下文件名按日期格式
------------------------------------------------------------------------------------------------------------------
set y=%date:~0,4%
set m=%date:~5,2%
set d=%date:~8,2%
set dmpname=mis_%y%_%m%_%d%_1855.dmp
set logname=mis_%y%_%m%_%d%_1855.log
exp mis/database_wh888_com@dbserver1_192.168.1.16 statistics=none feedback=1000 file=h:\dbbak\%dmpname% log=h:\dbbak\logs\%dmpname%
------------------------------------------------------------------------------------------------------------------
注意:%前后的空格,空格会导致文件名分割成多个部分,导致exp失败。
7.2 unix下文件名按日期格式
------------------------------------------------------------------------------------------------------------------
#/sbin/ksh
export ORACLE_BASE=/home/oracle/oracle
export ORACLE_HOME=/home/oracle/oracle/product/db_1
export ORACLE_SID=tmpdb
export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH
date=`date +"%Y%m%d%H%M%S"`
filename=$date.dmp
logname=$date.log
exp mis/database_wh888_com@dbserver1 statistics=none feedback=1000 file=/home/oracle/dbbackup/mis_$filename log=/home/oracle/dbbackup/mis_$logname
------------------------------------------------------------------------------------------------------------------