在使用Oracle数据库的数据泵工具(expdp)进行数据导出时,可能会遇到各种错误和问题,以下是一些常见的报错及其解决方法:
1、ORA39087: 目录名无效
原因:指定的directory参数非法,可能是目录名拼写错误或用户权限不足。
解决方法:检查并确保目录名正确无误,且当前用户具有相应的权限,如果目录名为DMP
,则命令应为expdp sys/473ac347AC@ORCL directory=DMP dumpfile=FULL_8.dmp FULL=y
。
2、ORA39002: 操作无效 ORA39070: 无法打开日志文件
原因:日志文件路径不正确或用户没有写权限。
解决方法:确保日志文件路径正确且用户有写权限,如果日志文件路径为c:\app\logs\export.log
,则命令应包含logfile=c:\app\logs\export.log
。
3、ORA31626: job does not exist ORA31638: cannot attach to job
原因:这是由于Oracle的一个BUG导致,当序列SYS.AQ$_KUPC$DATAPUMP_QUETAB_1_N
的值超过6位数时,expdp会报错。
解决方法:重建该序列,使其值在增长到6位数时重置,具体步骤包括删除并重新创建序列,如下所示:
drop sequence AQ$_KUPC$DATAPUMP_QUETAB_1_N; create sequence AQ$_KUPC$DATAPUMP_QUETAB_1_N minvalue 1 maxvalue 9999999999999999999999999999 start with 1 increment by 1 cache 20 nocycle;
然后再次执行expdp命令即可。
4、UDE00010: multiple job modes requested
原因:在命令中同时指定了tables
和schemas
参数,但这两个参数不能同时出现。
解决方法:保留一个参数,移除另一个参数后重试,只保留schemas=scott
或tables=emp,dept
。
5、ORA12154: TNS: 可以解析主机字符串
原因:@service_name参数有误,可能是因为数据库服务名不同或缺少映射。
解决方法:检查并确保@service_name参数正确无误,如果数据库服务名为ORCL
,则命令应为expdp sys/473ac347AC@ORCL directory=DMP dumpfile=FULL_8.dmp FULL=y
。
6、表空间块大小与配置大小不一致
原因:导入时创建的表空间块大小与系统设置的块大小不一致。
解决方法:修改db_Nk_cache_size的大小以匹配源库的块大小,或者在导入前先创建与源库字符集一致的目标数据库。
7、字符集不一致
原因:源库和目标库的字符集不一致。
解决方法:保证源和目标数据库的字符集一致,如果字符集不一致,建议删除目标数据库并重新创建与源库字符集一样的数据库。
在使用expdp进行数据导出时,需要注意命令的正确性、用户权限、目录路径、字符集以及表空间块大小等问题,遇到错误时,可以根据错误信息逐一排查并解决。