Oracle数据泵expdp/impdp

转:http://blog.csdn.net/fbysss/article/details/5692674

作者:fbysss
msn:[email protected]  
blog:blog.csdn.net/fbysss
声明:本文由fbysss原创,转载请注明出处
关键字:oracle 数据泵

expdp/impdp数据泵 是oracle10G的命令
必须在服务器上执行,su - oracle
想导出sss_c_开头的表,写下如下语句

expdp username/password dumpfile=aaa.dmp directory=/tmp INCLUDE=table:”like sss_c_%”

实际上,这句话错了好多个地方,看上去对的,实则漏洞百出:
首先会报错:

ORA-39006: internal error
ORA-39213: Metadata processing is not available

原来需要用dba身份进入,执行exec dbms_metadata_util.load_stylesheets
然后,directory不能直接使用外部目录,而是要用oracle自己建立的目录
create directory dumpdir as '/home/oracle/dump_dir';
grant read, write on directory dumpdir to username;

expdp username/password dmpfile=aaa.dmp directory=dmpdir INCLUDE=table:”like ‘sss_c_%’”
还是有问题:
ORA-39071: Value for EXCLUDE is badly formed
原因主要是转义字符问题,
单引号双引号都需要转义
expdp username/password dmpfile=aaa.dmp directory=dmpdir INCLUDE=table:/”like ‘sss_c_%/’/”
一看,ok了,生成文件了
但是,并没有完全按照预想得like的筛选范围导出表来。,一个sss_cal表也出来了。为啥呢?
原因是下划线也是特殊字符,是一个通配符。
解决办法:
expdp username/password dmpfile=aaa.dmp directory=dmpdir INCLUDE=table:/”like /‘sss/_c/_%/’ escape /‘//' "

impdp也要创建目录,赋予权限。并且执行exec dbms_metadata_util.load_stylesheets
impdp user/password dmpfile=aaa.dmp directory=dmpdir
ORA-31633: unable to create master table "USERNAME.SYS_IMPORT_FULL_05
需要使用dba
grant IMP_FULL_DATABASE to username;
impdp的时候,我故意删掉一个表,出现of type TABLE not found in schema
原因是expdp的时候,加了content=data_only 如果是all就可以了

如何使用管理员导出普通用户的表?

当然,用system和sys账号也是可以的,但需要加一个schemas参数,指定表对应用户

expdp system/systempassword dmpfile=aaa.dmp directory=dmpdir schemas=username INCLUDE=table:/”like /‘sss/_c/_%/’ escape /‘//' "

sys有点特殊,必须加as sysdba,格式如下:

 

expdp ‘userid="sys/syspassword as sysdba"’ dmpfile=aaa.dmp directory=dmpdir schemas=username INCLUDE=table:/”like /‘sss/_c/_%/’ escape /‘//' "

 

乱码解决:

impdp/expdp有时候出现错误信息是乱码,解决办法是:
NLS_LANG=”Simplified Chinese_china”.ZHS16GBK
export NLS_LANG

猜你喜欢

转载自z3sm2012.iteye.com/blog/2208161