两种导出工具exp和expdp,数据磊工具确实好用,不管是在性能还是在功能上都比exp等导出工具强大,不过需要在服务器端运行,利用oracle内部的队列和任务job机制,听到很多网友说到如何去除部分表或者部分对象导出,这个如果在expdp中可以很简单的实现。
Expdp ashuang/ashuang@orcl dumpfile=test01.dmp logfile=test01.log exclude=trigger,table:”in(‘SF01’,’SF02’)”
总是出现了所谓的
ora-39001参数值无效
ora-39071 exclude值的格式错误
找了半天还是找不出这个格式哪里写错了,网上收索了下又是该死的转义字符,记得以前写query时就是被转移字符搞得郁闷了。Query=”where item_id like ‘JS092500%’”,难怪大师曾经说到多用parfile来调用了,算了先修改一下吧!
Expdp ashuang/ashuang@orcl dumpfile=test01.dmp logfile=test01.log exclude=trigger,table:”in(‘SF01’,’SF02’)”
然后再次执行ok,其实这里用个parfile是很简单的,参数文件会避免掉复杂的参数转义。
Parfile test01.par的内容
Dumpfile=test01.dmp logfile=test01.log exclude=trigger,table:”in(‘SF01’,’SF02’)”
然后expdp ashuang/ashuang@orcl parfile=d:test01.par
执行顺利。
顺便说下exp的排除部分表吧,由于exp中没有expdp中的exclude参数只能利用脚本tables的列表来排除不需要的表。
Set heading off—这里主要排除了输出域标题,例如column的列名的显示,缺省为on
Set feedback off—这里不输出sql命令结束后处理条数,缺省为on
Spool d:test01.txt
Select 'tables=('||chr(10) from dual;
Select owner||'.'||table_name||chr(10) || ',' from dba_tables where table_name not in ('SF01','SF02');
Select 'dual' from dual;
Spool off
上述的chr(10)是换行符,可以在parfile中正常使用,但是如果单独的复制到命令模式下,则oracle会认为是结束命令而报错。
然后将生成的test01.txt文件的内容复制到parfile文件中。
Parfile text01.par
File=(d:text01.dmp,d:text02.dmp,d:text03.dmp) log=text01.log filesize=512Mbuffer=10240000 direct=y tables=(
SYS.CON$,
SYS.UNDO$,
SYS.CDEF$,
...
dual)
direct=y直接导出模式,很多网友谈到了buffer和direct的设置,direct=y绕过了sql命令处理层,加快了导出速度。
[@more@]来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25362835/viewspace-1056347/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/25362835/viewspace-1056347/