oracle expdp 可否使用网路扩充硬盘
EXPDP\u5bfc\u51fa\u662f\u4e0d\u662f\u6570\u636e\u5e93\u786c\u76d8\u4e0a\u9700\u8981\u6709\u8db3\u591f\u7684\u7a7a\u95f4\u9996\u5148\uff0c\u7b2c\u4e00\u6b65\u91cc\u7684connect to orcl identified by orcl\u662f\u4f60\u9700\u8981\u8fde\u63a5\u7684\u8fdc\u7a0b\u6570\u636e\u5e93orcl\uff08using\u540e\u9762\u90a3\u4e2a\uff09\u7684\u7528\u6237\u540d / \u5bc6\u7801\uff0c\u800c\u4e0d\u662f\u4f60\u672c\u5730\u7684\u7528\u6237\u540d\u5bc6\u7801\uff1b
\u6bd4\u5982\u4f60\u672c\u673a\u53ebscott/tiger\uff0c\u9700\u8981\u8fde\u63a5\u8fdc\u7a0b\u670d\u52a1\u5668\u4e0a\u7684exptest/exptest\uff0c\u90a3\u4f60\u8fd9\u91cc\u5c31\u9700\u8981\u4e9b\u6210"connect to exptest identified by exptest"\uff0c\u7b2c\u56db\u6b65\u5bfc\u51fa\u7684\u65f6\u5019\u5199"expdp scott/tiger ......"\uff1b\u800c\u4e14\u5982\u679c\u5bfc\u51fa\u8868\u7684\u8bdd\uff0c\u5728\u8868\u524d\u9762\u8fd8\u8981\u52a0\u4e0a\u8fdc\u7a0b\u90a3\u4e2a\u7528\u6237\u540d\uff0c\u4f8b\u5982\u8981\u5bfc\u51fatestTable,\u5219\u8981\u5199\u6210"expdp scott/tiger tables=exptest.testTable ......"\u8fd9\u6837
\u5176\u6b21\uff0c\u8981\u4fdd\u8bc1\u4f60\u5b57\u90fd\u6ca1\u6253\u9519\uff0c\u5982\u4f60\u5efa\u7acb\u7684link\u662forlink \u8fd8\u662fytlink\uff0c\u8fd8\u6709\u7b2c\u4e09\u6b65\u91cc\u662forcl\u6253\u6210\u4e86oacl\u3002
1\u3001\u6309\u7167\u4f60\u6240\u8bf4\u7684\u601d\u8def\uff0c\u4f60\u53ef\u4ee5\u5199\u4e2ashell\u811a\u672c\uff1a\u8bbe\u4e2a\u5b9a\u65f6\u4efb\u52a1
\u7b2c\u4e00\u6b65\uff0c\u5148\u751f\u6210\u4e2admp\u6587\u4ef6\uff0c\u89c4\u5b9a\u547d\u540d\u683c\u5f0f
\u7b2c\u4e8c\u6b65\uff0c\u8c03\u7528ftp\uff0cscp\u4e4b\u7c7b\u5de5\u5177\uff0c\u5c06\u8be5dmp\u6587\u4ef6\u4e0a\u4f20\u5230\u4f60\u6307\u5b9a\u7684\u8fdc\u7a0b\u670d\u52a1\u5668\u4e0a\u9762\u3002
2\u3001\u6839\u636e\u4f60\u7684\u9700\u6c42\uff0c\u4f60\u53ef\u4ee5\u8003\u8651\u4f7f\u7528expdp\u7684\u4e00\u4e2a\u7279\u6027\u3002
expdp/impdp\u6709\u4e2anetwork_link\u9009\u9879\u3002
\u6bd4\u5982expdp\uff0c\u4f7f\u7528\u8be5\u9009\u9879\u53ef\u4ee5\u76f4\u63a5\u5728\u672c\u5730\u8fdb\u884c\u8fdc\u7a0b\u5e93\u7684\u5907\u4efd\uff0c\u5e76\u4e14\u5c06\u5907\u4efd\u6587\u4ef6\u653e\u5728\u5728\u672c\u5730\u3002
\u4e5f\u5c31\u662f\uff0c\u5728\u4f60\u7684b\u670d\u52a1\u5668\u4e0a\u9762\u76f4\u63a5\u5bf9a\u670d\u52a1\u5668\u4e0a\u7684\u6570\u636e\u5e93\u8fdb\u884cexpdp\u64cd\u4f5c\uff0c\u4f1a\u5728b\u670d\u52a1\u5668\u4e0a\u9762\u751f\u6210dmp\u6587\u4ef6\u3002
\u5177\u4f53\u5173\u4e8enetwork_link\u7684\u7528\u6cd5\uff0c\u8fd8\u9700\u4f60\u81ea\u5df1\u52a0\u4ee5\u5b66\u4e60\u3002
例:frank用户主要有表T1,T2,T3,每个表中数据有500万行[oracle@cscscslocalhost abc]$ time expdp frank/frank directory=abc dumpfile=abc.dmpreal 0m41.692s
user 0m0.011s
sys 0m0.032s
[oracle@cscscslocalhost abc]$ time expdp frank/frank directory=abc dumpfile=abc.dmp parallel=3real 0m26.710s
user 0m0.019s
sys 0m0.007s
速度提升相当明显,如果每个dw进程都使用单独的dmp文件会更快[oracle@cscscslocalhost abc]$ time expdp frank/frank directory=abc dumpfile=abc%U.dmp parallel=3real 0m22.928s
user 0m0.017s
sys 0m0.008s
一般建议parall设置不要超过cpu*2.
2,transport_tablespace方法,直接复制表空间文件的方式。使用expdp和impdp只导出了数据字典信息.表空间要是自包含的
SQL> exec dbms_tts.transport_set_check('USERS',true);PL/SQL procedure successfully completed.
SQL> select * from transport_set_violations;no rows selected
transport tablespace的方法是迁移数据最快的方法。因为数据本身是不需要oracle的sql层来处理.但是表空间在expdp期间要设置成只读状态
3,network_link模式.当数据文件比较大的时候,这时候在目标库上直接通过network_link模式在目标库上进行导入,而不需要在源库上进行expdp操作,处理方式和正常的expdp/impdmp过程类似。这样做的好处主要是可以避免了在源库上写大文件,然后还需要移动到目标库上.
dongdongtang> grant datapump_exp_full_database to frank;Grant succeeded.
目标库
dongdongtang> create database link frank connect to frank identified by frank using 'frank';Database link created.
[oracle@localhost admin]$ impdp \'/ as sysdba\' network_link=frank schemas=franknetwork_link 定义了一个db_link名称,该过程把源端的frank schemas导入到目标库上.
4,使用适当的方法.expdp/impdp包括了两种主要方法direct_path和external_table使用direct_path会skip掉sql layer,速度会更快,但是不能定义query[oracle@localhost ~]$ expdp frank/frank dumpfile=abc.dmp query=T1:"where a>5" access_method=direct_pathORA-39033: Data cannot be filtered under the direct path access method.
其他的方法还有一些限制,具体可以参考mos相关文档。datapump一般会在启动的时候自动决定使用哪种方式,而且一旦决定不可以通过interactive的方式修改.可以使用400300来进行trace使用了哪种方式KUPW:02:03:30.332: 1: TABLE_DATA:"FRANK"."T1" direct path, parallel: 1KUPW:02:03:30.332: 1: In function GATHER_PARSE_ITEMSKUPW:02:03:30.332: 1: In function CHECK_FOR_REMAP_NETWORK5,对于index不会并行,对大表有索引的情况下,考虑索引以后单独 使用parallel,nologging重建。事实上在expdp的导出过程中对索引不会像表数据那样需要导出,索引只导出了ddl语句.
6,statistics的导入可能会非常慢,特别是在10.2之前。在expdp中尽量exclude,在impdp后,使用单独的收集任务来完成.
7,利用强大的过滤功能,主要的选项有tables,include,exclude和query。tables定义只导出某些需要的表,include表示只导出某些对像,exclude表示排除某些对像.query可以对表中数据进行过滤,只导出我们需要的那部分数据.
8,利用压缩过功能可以减少dump文件的大小
[oracle@localhost dpdump]$ expdp frank/frank dumpfile=abc.dmp tables=t1[oracle@localhost dpdump]$ ls -l abc.dmp
-rw-r----- 1 oracle oinstall 1583874048 Jan 20 03:54 abc.dmp[oracle@localhost dpdump]$ expdp frank/frank dumpfile=abc.dmp tables=t1 compression=all[oracle@localhost dpdump]$ ls -l abc.dmp
-rw-r----- 1 oracle oinstall 197234688 Jan 20 04:29 abc.dmp可以看到压缩前1.5G,压缩过后只有190M左右.
在12c的版本中,可以通过compression_algorithm来定义压缩算法,常用的压缩级别有:basic,low,medium,high。
结合paralell,可以非常好的利用多core cpu的处理能力.
在11G以前的版本中也有很多的bug会导致datapump变慢的情况,可以查询相关的mos文档.datapump是使用dbms_metadata和dbms_datapump两个包来完成的,所以shared pool要保证不会太小.
expdp 只是用来导出数据的。
扩展阅读:oracle expdp1033 ... oracle unique index ... oracle explain ... oracle impdp ... oracle expdp命令详解 ... oracle regexp substr ... oracle regexplike ... oracle exdata ... oracle show pdbs ...