IMPDP,EXPDP 数据泵详解

阅读更多

 

10G才开始提供的新工具EXPDP IMPDP
 与EXP和IMP类似 可以算是他们的加强版 但各自独立 互不通用 导出文件只能在服务器端(借助了数据库目录)
 EXP和EMP的功能 数据泵基本都涵盖
数据泵导出包括导出表,导出方案,导出表空间,导出数据库4种方式

要使用数据泵必须先创建数据库目录,数据库目录只允许sys创建,普通用户使用 必须授权
 
 
创建目录与授权 
SQL> create directory dump_dir as '/data01/dump/';
Directory created.
SQL> grant read,write on directory dump_dir to scott;
Grant succeeded.
 
查看已经存在的目录:
SYS SQL> select * from dba_directories;
OWNER                          DIRECTORY_NAME                 DIRECTORY_PATH
------------------------------ ------------------------------ ---------------------------------------------
SYS                            DUMP_DIR                       /data01/dump/
SYS                            WORK_DIR                       /ade/aime_stamc10/oracle/work
SYS                            ADMIN_DIR                      /ade/aime_stamc10/oracle/md/admin
SYS                            ORACLE_OCM_CONFIG_DIR          /opt/app/oracle/product/10.2.0/ccr/state
SYS                            DATA_PUMP_DIR                  /opt/app/oracle/product/10.2.0/rdbms/log/
 
查看权限:
SYS SQL> select PRIVILEGE,TABLE_NAME from dba_tab_privs where GRANTEE='SCOTT';
PRIVILEGE                                TABLE_NAME
---------------------------------------- ------------------------------
READ                                     DUMP_DIR
WRITE                                    DUMP_DIR
 
数据泵工具导出的步骤
1、创建DIRECTORY
create directory dump_dir as '/data01/dump/'; 
2、授权
Grant read,write on directory dump_dir to scott;
3、执行导出
expdp scott/tiger  directory=dump_dir tables=dept,emp dumpfile =exp%U.dmp logfile=expdp_test1.log;

scott/tiger 连接用户验证
directory=dump_dir 使用的数据库目录
dumpfile=exp%U.dmp 导出文件名 %U 是双位数字序列号 并行导时有意义 默认并行度为1
tables=dept,emp  要导出的表
 
其他使用说明
directory=dir_dp必须放在前面,如果将其放置最后,会提示 ORA-39002: 操作无效
ORA-39070: 无法打开日志文件。
ORA-39087: 目录名 DATA_PUMP_DIR; 无效

在导出过程中,DATA DUMP创建并使用了一个名为SYS_EXPORT_SCHEMA_01的对象,此对象就是DATA DUMP导出过程中所用的JOB名字,
如果在执行这个命令时如果没有指定导出的JOB名字那么就会产生一个默认的JOB名字,如果在导出过程中指定JOB名字就为以指定名字出现
如下改成:
expdp ...........  job_name=my_job1
导出语句后面不要有分号,否则如上的导出语句中的job表名为‘my_job1;’,而不是my_job1。会导致expdp执行该命令时一直提示找不到job表
 
创建的目录一定要在数据库所在的机器上。否则也是提示:
ORA-39002: 操作无效
ORA-39070: 无法打开日志文件。
ORA-39087: 目录名 DATA_PUMP_DIR; 无效
 
导出的其他相关命令使用
1)Ctrl+C组合键:在执行过程中,可以按Ctrl+C组合键退出当前交互模式,退出之后,导出操作不会停止
2)Export> status  --查看当前JOB的状态及相关信息
3)Export> stop_job  --暂停JOB(暂停job后会退出expor模式)
4)重新进入export模式下: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自动卸载
 

参数:
content=
可以导出表结构(metadata_only),表数据(data_only),表结构+表数据(all),默认值是all
 
tables=
可以指定多个表 用逗号分隔,不写这个参数 就是导出模式下的所有
 
schemas=模式名
导出模式下的所有对象 要求对指定模式有足够的权限
 
full=y 
导出全库 需要使用权限较高的用户sys或system
expdp '/ as sysdba' directory=dp_dir dumpfile=exp_full_db.dmp full=y
 
PARALLEL=
并行度设置 根据CPU的数量设置
 
tablespaces=
导出表空间内的所有数据
 
TRANSPORT_TABLESPACES=
导出表空间的定义 用于表空间传输
 
parfile=参数文件
可以将参数写在文件中,加载
 
query=
按where条件导
expdp scott/seker directory=dp_dir dumpfile=exp_emp_deptno_10b.dmp tables=emp query='"where DEPTNO=20"'
 
include 和 exclude
排查对象 可以过滤的对象有table,index,trigger,procedure
写在参数文件中不需要转义 写在命令行要转义
expdp userid=scott/seker directory=dp_dir dumpfile=exp_emp_deptno_10e.dmp exclude=table:\"\=\'EMP\'\"
[oracle@sql dp_dir]$ cat p.txt 
.....
exclude=table:"='EMP'"
[oracle@sql dp_dir]$ expdp parfile=p.txt
expdp userid=scott/seker directory=dp_dir dumpfile=exp_emp_deptno_10f.dmp include=table:\"in\(\'EMP\',\'DEPT\'\)\"
[oracle@sql dp_dir]$ cat p.txt 
.....
include=table:"in('EMP','DEPT')"
--include仅导出以B开头的所有表,包含与表相关的索引,备注等。不包含过程等其它对象类型:
expdp .................. include=TABLE:\"LIKE \'B%\'\"
--include导出排除B$开头的所有表:
expdp .................. include=TABLE:\"NOT LIKE \'B$%\'\"
--include仅导出scott用户下的所有存储过程:
expdp ....  schemas=scott  .........  include=PROCEDURE;

--exclude导出除TABLE类型以外的所有对象,如果表不导出那么与表相关的索引,约束等与表有关联的对象类型也不会被导出:
expdp ..................... exclude=TABLE;
--exclude导出排除B$开头的所有表:
expdp ..................... exclude=TABLE:\"LIKE\'b$%\'\";
--exclude导出scott用户下的所有对象,但是对于表类型只导出以b$开头的表:
expdp .................... exclude=TABLE:\"NOT LIKE \'b$%\'\";

ATTACH=
该选项用于在客户会话与已存在导出作用之间建立关联
ATTACH=[schema_name.]job_name
Schema_name用于指定方案名,job_name用于指定导出作业名,如果使用ATTACH选项,在命令行除了连接字符串和ATTACH选项外,不能指定任何其他选项
Expdp scott/tiger ATTACH=scott.export_job
 
DIRECTORY=
指定转储文件和日志文件所在的目录,目录对象是使用CREATE DIRECTORY语句建立的对象,而不是OS目录
DIRECTORY=directory_object
 
DUMPFILE=
用于指定转储文件的名称,默认名称为expdat.dmp
DUMPFILE=[directory_object:]file_name [,….]
Directory_object用于指定目录对象名,file_name用于指定转储文件名,如果不指定directory_object,导出会自动使用DIRECTORY选项指定的目录对象
 
ESTIMATE=
指定估算被导出表所占用磁盘空间分方法.默认值是BLOCKS
ESTIMATE={BLOCKS | STATISTICS}
设置为BLOCKS时,oracle按照目标对象所占用的数据块个数乘以数据块尺寸估算对象占用的空间,设置为STATISTICS时,根据最近统计值估算对象占用空间
 
ESTIMATE_ONLY=
指定是否只估算导出作业所占用的磁盘空间,默认值为N
EXTIMATE_ONLY={Y | N}
设置为Y时,导出作用只估算对象所占用的磁盘空间,而不会执行导出作业,为N时,不仅估算对象所占用的磁盘空间,还会执行导出操作.
 
FILESIZE=
指定导出文件的最大尺寸,默认为0,(表示文件尺寸没有限制)
 
FLASHBACK_SCN=
指定导出特定SCN时刻的表数据
FLASHBACK_SCN=scn_value
Scn_value用于标识SCN值.FLASHBACK_SCN和FLASHBACK_TIME不能同时使用
 
FLASHBACK_TIME=
指定导出特定时间点的表数据
FLASHBACK_TIME=”TO_TIMESTAMP(time_value)”
如:FLASHBACK_TIME=“TO_TIMESTAMP(’22-03-2012 14:35:00’,’DD-MM-YYYY HH24:MI:SS’)”
 
HELP=
指定是否显示EXPDP命令行选项的帮助信息,默认为N,当设置为Y时,会显示导出选项的帮助信息.
Expdp help=y
 
JOB_NAME=
指定要导出作用的名称,默认为SYS_XXX
JOB_NAME=jobname_string
SELECT * FROM DBA_DATAPUMP_JOBS;--查看存在的job
 
LOGFILE=
指定导出日志文件文件的名称,默认名称为export.log
LOGFILE=[directory_object:]file_name
Directory_object用于指定目录对象名称,file_name用于指定导出日志文件名.如果不指定directory_object.导出会自动使用DIRECTORY的相应选项值.
 
NETWORK_LINK=
指定数据库链名,如果要将远程数据库对象导出到本地例程的转储文件中,必须设置该选项.
 
NOLOGFILE=
该选项用于指定禁止生成导出日志文件,默认值为N.
 
PARFILE=
指定导出参数文件的名称
 
STATUS=
指定显示导出作用进程的详细状态,默认值为0
 
TRANSPORT_FULL_CHECK=
该选项用于指定被搬移表空间和未搬移表空间关联关系的检查方式,默认为N.
当设置为Y时,导出作用会检查表空间直接的完整关联关系,如果表空间所在表空间或其索引所在的表空间只有一个表空间被搬移,将显示错误信息.
当设置为N时,导出作用只检查单端依赖,如果搬移索引所在表空间,但未搬移表所在表空间,将显示出错信息,如果搬移表所在表空间,
未搬移索引所在表空间,则不会显示错误信息.
 
VERSION=
指定被导出对象的数据库版本,默认值为COMPATIBLE.
VERSION={COMPATIBLE | LATEST | version_string}
为COMPATIBLE时,会根据初始化参数COMPATIBLE生成对象元数据;
为LATEST时,会根据数据库的实际版本生成对象元数据.
version_string用于指定数据库版本字符串.调用EXPDP
 
 
 

数据泵导入方法:
impdp
参数使用方法和导出基本一致
不同的有:
 
REMAP_DATAFILE
该选项用于将源数据文件名转变为目标数据文件名,在不同平台之间搬移表空间时可能需要该选项.
REMAP_DATAFIEL=source_datafie:target_datafile
 
REMAP_SCHEMA
该选项用于将源方案的所有对象装载到目标方案中.
REMAP_SCHEMA=source_schema:target_schema
[oracle@sql dp_dir]$ impdp \''/ as sysdba'\' directory=dp_dir dumpfile=exp_full_db.dmp schemas=scott remap_schema=scott:u1
 
REMAP_TABLESPACE
将源表空间的所有对象导入到目标表空间中
REMAP_TABLESPACE=source_tablespace:target:tablespace
 
REUSE_DATAFILES=
该选项指定建立表空间时是否覆盖已存在的数据文件.默认为N
REUSE_DATAFIELS={Y | N}

SKIP_UNUSABLE_INDEXES=
指定导入是是否跳过不可使用的索引,默认为N
 
SQLFILE=
指定将导入要指定的索引DDL操作写入到SQL脚本中
SQLFILE=[directory_object:]file_name
Impdp scott/tiger DIRECTORY=dump DUMPFILE=tab.dmp SQLFILE=a.sql
 
STREAMS_CONFIGURATION=
指定是否导入流元数据(Stream Matadata),默认值为Y.
 
TABLE_EXISTS_ACTION=
该选项用于指定当表已经存在时导入作业要执行的操作,默认为SKIP
TABBLE_EXISTS_ACTION={SKIP | APPEND | TRUNCATE | FRPLACE }
当设置该选项为SKIP时,导入作业会跳过已存在表处理下一个对象;当设置为APPEND时,会追加数据,为TRUNCATE时,导入作业会截断表,
然后为其追加新数据;当设置为REPLACE时,导入作业会删除已存在表,重建表病追加数据,注意,TRUNCATE选项不适用与簇表和NETWORK_LINK选项
 
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
 
TRANSPORT_DATAFILES=
该选项用于指定搬移空间时要被导入到目标数据库的数据文件
TRANSPORT_DATAFILE=datafile_name
Datafile_name用于指定被复制到目标数据库的数据文件
TRANSPORT_DATAFILES='/opt/app/oracle/oradata/ora10g/users01.dbf'
 
 
 
不落地导入:
利用db_like实现模式复制 不需要导出 直接使用导入命令即可
SYS SQL> create directory dump_dir as '/data01/dump/';
SYS SQL> grant read,write on directory dump_dir to scott;
SYS SQL> create public database link lnk_to_22438 connect to goolen identified by goolen using '22438_report';
[oracle@sql dp_dir]$ impdp scott/tiger network_link=lnk_to_22438  remap_schema=goolen:scott tables=emp REMAP_TABLESPACE=users:data01

你可能感兴趣的:(oracle,数据泵)