共计 2780 个字符,预计需要花费 7 分钟才能阅读完成。
在平常备库和数据库迁移的时候,当遇到大的数据库的时候在用 exp 的时候往往是需要好几个小时,耗费大量时间。Oracle10g 以后可以用 expdp 来导出数据库花费的时间要远小于 exp 花费的时间,而且文件也要小很多。
1. 使用 expdp 要先在数据库中创建 directory, 并给相应的用户 read,write 权限.
SQL>create dexp 和 empdp 的区别 irectory dmpdir as‘/u01/dmdir’;
SQL>grant read,write on directory to test;
2. 常用导出方法
$expdp scott/tiger DUMPFILE=scott.dmp DIRECTORY=dmpdir SCHEMAS=test
$expdp scott/tiger DUMPFILE=tmp_dump.dmp DIRECTORY=dmpdir TABLES=(tmp_test:p1,tmp_test:p2) JOB_NAME=tmp_dump LOGFILE=tmp_dump.log
$expdp scott/tiger DUMPFILE=full.dmp DIRECTORY=dmpdir FULL=Y JOB_NAME=full
$expdp scott/timer DUMPFILE=tmp_200703.dmp DIRECTORY=dmpdir TABLES=tmp QUERY=\”where to_char\(create_time,\’yyyy-mm-dd\’\)\<\’2007-04\’\”
常用一些参数说明:
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:
当 Data Pump Export (DPE) 运行时,按 Control-C;它将阻止消息在屏幕上显示,但不停止导出进程本身。相反,它将显示 DPE 提示符(如下所示)。进程现在被认为处于“交互式”模式:
Export>
这种方法允许在这个 DPE 作业上输入命令查询及控制当前作业。
3. 您可以通过 PARALLEL 参数为导出使用一个以上的线程来显著地加速作业。每个线程创建一个单独的转储文件,因此参数 dumpfile 应当拥有和并行度一样多的项目。您可以指定通配符作为文件名,而不是显式地输入各个文件名,例如:
expdp ananda/abc123 tables=CASES directory=DPDATA1 dumpfile=expCASES_%U.dmp parallel=4 job_name=Cases_Export
注意:dumpfile 参数拥有一个通配符 %U,它指示文件将按需要创建,格式将为 expCASES_nn.dmp,其中 nn 从 01 开始,然后按需要向上增加。
在并行模式下,状态屏幕将显示四个工作进程。(在默认模式下,只有一个进程是可见的)所有的工作进程同步取出数据,并在状态屏幕上显示它们的进度。
分离访问数据文件和转储目录文件系统的输入 / 输出通道是很重要的。否则,与维护 Data Pump 作业相关的开销可能超过并行线程的效益,并因此而降低性能。并行方式只有在表的数量多于并行值并且表很大时才是有效的。
4.exp/imp 与 expdp/impdp 区别:
(1) 把用户 usera 的对象导到用户 userb, 用法区别在于 fromuser=usera touser=userb ,remap_schema=’usera’:’usera’。例如: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;
(2) 更换表空间,用 exp/imp 的时候,要想更改表所在的表空间,需要手工去处理一下,
如 alter table xxx move tablespace_new 之类的操作。
用 impdp 只要用 remap_tablespace=’tabspace_old’:’tablespace_new’
(3) 当指定一些表的时候,使用 exp/imp 时,tables 的用法是 tables=(‘table1′,’table2′,’table3′)。
expdp/impdp 的用法是 tables=’table1′,’table2′,’table3′
(4) 是否要导出数据行
exp(ROWS=Y 导出数据行,ROWS=N 不导出数据行)
expdp content(ALL: 对象+导出数据行,DATA_ONLY:只导出对象,METADATA_ONLY:只导出数据的记录)
(5) expdp 是 [10g] 的新特性而且只能在服务器执行。而 exp/imp 是通用的。
(6) oracle11g 中有个新特性,当表无数据时,不分配 segment,以节省空间, 所以 exp 导不出空表。解决的办法是用 expdp,当然也可以设置 deferred_segment_creation 参数 或者 insert 一行,再 rollback,但是这样很麻烦。
更多 Oracle 相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-08/133899.htm