数据库导入导出exp和expdp以及imp和impdp的区别

时间:2020-12-02 14:47:40

在使用命令行进行数据库导入导出时,经常会使用到exp和imp两个命令。当然,在数据量小的时候用这两个是无可厚非的,但是当数据量比较大,多字段百万级数据量的时候,你会发现使用exp和imp导入导出数据是一个让人抓狂的事情。干着急,进度条就是不动。后来偶然看到环境配置组同事写导出命令的时候使用了expdp导出的,刚来时说这什么玩意?难道是服务器系统特有的命令?后来百度了一下发现,我去,居然有这么牛掰的命令而我却不知道。。。。。。自此以后就果断抛弃了exp和imp,宠幸expdp和impdp去了。

expdp和impdp是oracle 10g版本出的一个新功能,使用数据泵导入导出数据,据官方推荐说使用数据泵导入导出会比普通的导入导出快十倍,可以说是非常强大了,下面来详细说下数据泵的具体使用方法以及和普通导入导出的区别。

1、exp导出
exp userid='sys/admin@orcl as sysdba' file=D:/Backup/oracle/expfull.dmp  tables=(skate.testbind,skate.testbind_tmp,skate.test_idx)       
   buffer=409600000  & time

这是最普通的导出方法

2、expdp导出
C:/Documents and Settings/Administrator>expdp 'sys/aibo@test as sysdba' director
y=dpdump dumpfile=expdpp.dp tables=(skate.testbind,skate.testbind_tmp,skate.test_idx)  parallel=2 & time

参数说明:

SCOTT/TIGER:用户/密码(*)
DUMPFILE:导出后的文件名(*)
DIRECTORY:导出文件存放位置(位于服务器端)(*)
CONTENT:导出文件中包含的内容(默认为:ALL,可选DATA_ONLY/METADATA_ONLY)
FILESIZE:指定导出文件大小(单位为bytes).
JOB_NAME:此次导出进程使用的名称,方便跟踪查询(可选)
LOGFILE:日志文件名(默认为:export.log)
INCLUDE:导出时包含指定的类型(例:INCLUDE=TABLE_DATA,INCLUDE=TABLE:"LIKE 'TAB%'"INCLUDE=TABLE:”NOT LIKE ‘TAB%’”…)
EXCLUDE:导出时排除的数据类型(例:EXCLUDE=TABLE:EMP)
FULL:全库导出时使用(同EXP的FULL,默认为N)
SCHEMA:导出某一个SCHEMA下的所有数据
TABLES:按表导出(这里的方法和EXP一样)
TABLESPACE:指定一个表空间导出.
QUERY:按表导出时,使用条件语句限定导出范围(同exp中的QUERY)
TRANSPORT_FULL_CHECK:
TRANSPORT_TABLESPACES:
FLASHBACK_SCN:
FLASHBACK_TIME:
PARALLEL:并行操作
PARFILE:
NETWORK_LINK:

这是使用数据泵导出,数据泵导出有以下优点:

    <1>数据泵导出可以使用parallel属性指定并行任务导出,parallel=2就是并行2个任务导出。当然,这个并不是越多越好,需要考虑服务器的性能和cpu的个数等等因素。还可以通过导出多个文件的方式提高性能,即使用dumpfile=expdp.dp1,expdp.dp2这种方式提高性能。需要用户根据实际情况设置

    <2>exp导出时读取的是sql,通过加载sql查询结果到缓存,然后在写进目标文件,而expdp是直接读取的数据块,直接从数据块写进目标文件。

    <3>expdp是服务端程序,直接在数据库服务端使用。而exp是客户端使用,要收到网速的影响,因此会比较慢。


3、imp导入
imp system/manager@TEST file=d:\daochu.dmp
4、impdp导入
imp aichannel/aichannel@TEST full=y file=d:\datanewsmgnt.dmp ignore=y
区别:

1、empdp导出的文件只能用impdp导入,exp导出的文件只能用imp导入,不能互通。

2、在使用empdp之前,需要首先创建directory来确定导出的文件路径,而不能在导出时指定文件的导出路径。

CREATE DIRECTORY dump_dir AS '/u01/app/dump';
GRANT READ,WRITE ON DIRECTORY dump_dir to scott;

3、当想把一个用户的表导到明一个用户名下时

 
imp system/passwd fromuser=usera touser=userb file=/oracle/exp.dmp log=/oracle/exp.log;impdp system/passwd directory=expdp dumpfile=expdp.dmp remap_schema=’usera’:'userb’ logfile=/oracle/exp.log;

4、更换表空间,用exp/imp的时候,要想更改表所在的表空间,需要手工去处理一下,
如alter table xxx move tablespace_new之类的操作。
用impdp只要用remap_tablespace='tabspace_old':'tablespace_new'
5、当指定一些表的时候,使用exp/imp 时,tables的用法是 tables=('table1','table2','table3')。
expdp/impdp的用法是tables='table1','table2','table3'
6、是否要导出数据行
exp (ROWS=Y 导出数据行,ROWS=N 不导出数据行)
expdp content(ALL:对象+导出数据行,DATA_ONLY:只导出对象,METADATA_ONLY:只导出数据的记录)