数据泵expdp/impdp

一.expdp和impdp使用说明
1.实现逻辑备份和逻辑恢复
2.在数据库用户之间移动对象
3.在数据库之间移动对象
4.实现表空间搬移。

1什么是directory对象
directory对象是oracle10g版本提供的一个新功能。他是一个指向,指向操作系统中的一个路径。每个directory都包含read write两个权限,可以通过grant命令授权给指定的用户或角色。相关视图:all_directories;

2.如何调用
最长用的方式。通常需要先编写一个参数文件。指定导出时需要的各种参数。然后以如下方式调用。
expdp user/pwd parfile=xxx.dmp

操作模式
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.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权限)。

SYS@SBDB1>create directory chengzhuo as '/home/oracle';


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.

SYS@PROD1>select owner,table_name,tablespace_name from all_tables where owner in('CHENGZHUO');


no rows selected

SYS@PROD1>create directory chengzhuo as '/home/oracle';


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>col tablespace_name for a17
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

SYS@PROD1>conn chengzhuo/oracle
Connected.
CHENGZHUO@PROD1>select count(*) from t1;  


  COUNT(*)
----------
     86976

在导入过程中,并没有创建用户chengzhuo,仅仅只创建了一个表空间cheng_tablespace,但导入的过程中system用户会默认创建对应的用户chengzhuo并自动赋予对应的DBA权限,(自行测试)。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30606744/viewspace-1876497/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/30606744/viewspace-1876497/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值