运维 —— expdp、impdp

一、exp/imp与expdp/impdp

1)exp和imp是客户端工具程序,它们既可以在可以客户端使用,也可以在服务端使用。

2)expdp和impdp是服务端的工具程序,他们只能在ORACLE服务端使用, 不能在客户端使用。

3)字符集的问题到expdp/impdp数据泵已经消除,因为expdp/impdp真正的导出导入操作都是在数据库服务器上完成的

4)expdp/impdp工具需要提前创建一个路径,然后命令中加入参数directory。这个路径的创建原因是因为expdp/impdp是工作于服务器端,而这个路径就是对应的服务器端路径。

5)exp默认是传统路径,这种模式下,是用select来查询数据,然后写入buffer cache,在将这些数据写入evaluate buffer,最后传到export客户端,再写入dump文件。      

exp直接路径模式下,直接从硬盘读取数据,然后写入PGA,格式就是export的格式,不需要转换,数据再直接传到export客户端,写入dump文件。这种模式没有经过evaluation buffer,少了一个过程,导出速度提高也是很明显。

exp没有并行参数,要进行并行导出,可以写多条命令同时导出,这种方式可用于特定的数据迁移情况,按表或表空间进行快速数据迁移。  

expdp是Oracle 10g上推出的一种先进的数据导出方式,比exp有较大的性能提升,expdp可以看成是exp的升级版,相当于exp + direct mode + parallel。

二、操作

1、创建目录和引用目录

sys@ORCL> create or replace directory dmpdir as '/home/oracle';
Directory created.
sys@ORCL> col OWNER for a10
sys@ORCL> col DIRECTORY_NAME for a30
sys@ORCL> col DIRECTORY_PATH for a50
sys@ORCL> select * from dba_directories where directory_name = 'DMPDIR';

2、常规导入导出

共有参数为:目录,dump文件名,log文件名,含义明显,不再讲解,如:directory=DUMP_DIR  dumpfile=abc.dmp  logfile=abc.log

以下用...代替表示,如

expdp scott/tiger@db10g ...
impdp scott/tiger@db10g ...

1)按数据表

expdp scott/tiger@db10g tables=EMP,DEPT ...
impdp scott/tiger@db10g tables=EMP,DEPT ...

加参数TABLE_EXISTS_ACTION=APPEND可以将数据导入到已存在的表中

2)按用户

exp/imp中用owner,数据泵中用schema

expdp scott/tiger@db10g schemas=SCOTT ...
impdp scott/tiger@db10g schemas=SCOTT ...

3)按整个数据库

expdp system/password@db10g full=Y ...
impdp system/password@db10g full=Y ...

3、高级导入导出

1)include & exclude & parfile

用于指定导入导出对象。

expdp scott/tiger@db10g schemas=SCOTT include=TABLE:"IN ('EMP', 'DEPT')" ...
expdp scott/tiger@db10g schemas=SCOTT exclude=TABLE:"= 'BONUS'" ...

如果用命令行方式,应用转义字符 \

include=TABLE:\"IN (\'EMP\', \'DEPT\')\"

或者用parfile参数加*.par文件方式,就不需要用转义字符
expdp scott/tiger parfile=mypar.par

root> cat mypar.par
directory=data
logfile=t1.log
dumpfile=t1.dmp
full=yes
exclude=table:"IN('CUSTOMER','ORDOR)"
exclude=schema: "IN ('WMSYS', 'OUTLN')"

也因为如此,强烈推荐使用参数文件在parfile参数中。

Windows:

c:>  expdp scott/tiger exclude=TABLE:"IN (\'CUSTOMER\', \'ORDOR\')"

UNIX/Linux:

root>  expdp scott/tiger exclude=TABLE:\"IN (\'CUSTOMER\', \'ORDOR\')\"

2) like & in

用于指定导入导出对象。

INCLUDE=TABLE,VIEW,PACKAGE:"LIKE '%API'"

或者

INCLUDE=TABLE
INCLUDE=VIEW
INCLUDE=PACKAGE:"LIKE '%API'"

EXCLUDE=SCHEMA:"LIKE 'SYS%'"
EXCLUDE=SCHEMA:"IN ('OUTLN','SYSTEM','SYSMAN','FLOWS_FILES','APEX_030200','APEX_PUBLIC_USER','ANONYMOUS')"

3)表空间不同用户的数据导入导出

导出参数文件expdp.par

dumpfile=eSchemasXJ.dmp
logfile=eSchemasXJ.log
directory=dpdumpdir
schemas=xj

导出语句:expdp system/123456 parfile=expdp.par

导入用户已存在:

导入参数文件

dumpfile=eSchemasXJ.dmp
logfile=iSchemasXJ.log
directory=dpdumpdir
remap_schema=xj:xja

导入语句:impdp system/123456 parfile=impdp.par

数据导入成功,但将出现一个错误:

ORA-31684: 对象类型 USER:"XJA" 已存在。

导入用户不存在:

导入参数文件为:

dumpfile=eSchemasXJ.dmp
logfile=iSchemasXJ.log
directory=dpdumpdir
remap_schema=xj:xjb

导入成功,无错误。将创建xjb用户,且密码与xj相同。

4)表空间之间用户的数据导入导出(remap_schema与remap_tablespace同时都要有)

导出参数文件expdp.par

dumpfile=eSchemasXJ.dmp
logfile=eSchemasXJ.log
directory=dpdumpdir
schemas=xj  //xj用户下的数据

导出语句:expdp system/123456 parfile=expdp.par

导入用户已存在:

导入参数文件

dumpfile=eSchemasXJ.dmp
logfile=iSchemasXJ.log
directory=dpdumpdir
remap_schema=xj:yyu1 //已存在的用户
remap_tablespace=users:yyds

导入语句:impdp system/123456 parfile=impdp.par

数据导入成功,但将出现一个错误:

ORA-31684: 对象类型 USER:"YYU1" 已存在。

导入用户不存在:

导入参数文件为:

dumpfile=eSchemasXJ.dmp
logfile=iSchemasXJ.log
directory=dpdumpdir
remap_schema=xj:xjx //目标用户不能是xj,因为整个数据库中,用户名称具有唯一性
remap_tablespace=users:yyds

导入成功,无错误。将创建xjx用户,且密码与xj相同。

5)表空间的数据导入导出

导出参数文件

dumpfile=eTablespaceYyds.dmp
logfile=eTablespaceYyds.log
directory=dpdumpdir
tablespaces=yyds

导入表空间已存在:

导入参数文件

dumpfile=eTablespaceYyds.dmp
logfile=iTablespaceYyds.log
directory=dpdumpdir
tablespaces=yyds //此句要与不要效果一样,提示表什么的已存在

以上是导入yyds。如果已创建了表空间zgms,则以下命令将报错,因为用户已存在

dumpfile=eTablespaceYyds.dmp
logfile=iTablespaceYyds.log
directory=dpdumpdir
remap_tablespace=yyds:zgmis

改为加上remap_schema=xx:xxx ?用户很多怎么搞?

导入表空间不存在:

导入参数文件

dumpfile=eTablespaceYyds.dmp
logfile=iTablespaceYyds.log
directory=dpdumpdir
tablespaces=newtb

报错,导入失败。

6)全库数据导入导出

导出参数文件

dumpfile=eTablespaceYyds.dmp
logfile=eTablespaceYyds.log
directory=dpdumpdir
full=yes
parallel= 4

导入参数

dumpfile=eTablespaceYyds.dmp
logfile=iTablespaceYyds.log
directory=dpdumpdir
full=yes
导入前,原数据库不能有表空间,数据文件。?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值