龙空技术网

记一次生产数据库Oracle数据泵导出报ORA-31617错误的解决过程

波波说运维 149

前言:

今天小伙伴们对“oracle工具导出数据”大约比较着重,你们都想要剖析一些“oracle工具导出数据”的相关文章。那么小编在网上搜集了一些有关“oracle工具导出数据””的相关内容,希望姐妹们能喜欢,兄弟们一起来学习一下吧!

概述

先说一下背景,最近在对某个RAC数据库做瘦身,需要对历史数据做迁移,当在RAC数据库执行EXPDP并行导出时出现了这个错误信息--ORA-31617,下面记录下解决的整体思路。

具体报错

导出的命令如下:

expdp rfuser/"xxx" directory=dp_hwb dumpfile=TAB_SP_OTMSHIPMENT.dmp LOGFILE=TAB_SP_OTMSHIPMENT.log TABLES=TAB_SP_OTMSHIPMENT QUERY=TAB_SP_OTMSHIPMENT:\"WHERE INSERT_TIME\<= TO_DATE\(\'20181230 00:00:00\',\'yyyymmdd hh24:mi:ss\'\)\" exclude=statistics parallel=4 

从提示看一开始以为是权限问题,但是重新授权后还是有这个报错。查了下资料才发现是:

数据泵的并行度设置为4,同时向4个DUMPFILE中写入数据。在写入时出现ORA-31693、ORA-29913和ORA-31617错误。

解决

这里发现对于RAC环境而言,Oracle会尝试将并行导出放到两个节点上,而由于DIRECTORY是本地磁盘,且在另外一个节点上没有建立同样的目录,因此打开文件报错的信息。

那么如果想要使用RAC上的并行导出,确保相同的目录在两个节点上同时存在。如果只想在一个节点上执行数据泵的导出那么就不要使用并行方式。

去掉并行参数测试:

 expdp rfuser/"xxx" directory=dp_hwb dumpfile=TAB_SP_OTMSHIPMENT.dmp LOGFILE=TAB_SP_OTMSHIPMENT.log TABLES=TAB_SP_OTMSHIPMENT QUERY=TAB_SP_OTMSHIPMENT:\"WHERE INSERT_TIME\<= TO_DATE\(\'20181230 00:00:00\',\'yyyymmdd hh24:mi:ss\'\)\" exclude=statistics 

可以看到成功导出来了。

这里主要提个醒,parallel虽然能加快速度,但在有些场景还是得慎用的。后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~

标签: #oracle工具导出数据 #oracle查询数据泵目录 #oracle文件写入错误 #oracle 数据泵