专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

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

ins518 2024-10-16 12:24:51 技术文章 12 ℃ 0 评论

概述

先说一下背景,最近在对某个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方面的内容,感兴趣的朋友可以关注一下~

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表