ORACLE DATAPUMP导出报错故障处理ORA-31626: job does not exist ORA-31650: timeout waiting for master process response
操作系统:windows2012
数据库版本:11.2.0.1本地 dblink 连接的数据库版本是12.1.0.2(aws云)
问题:
公司的备份是通过软件进行定时的expdp备份,本地的windows oracle数据库通过db_link备份,其中通过软件备份有报错,其中单独执行expdp语句也有报错,ORA-31626: job does not exist ORA-31650: timeout waiting for master process response
截图如下:
同时,公司的软件通过调度定时任务备份截图如下:(以下图是已经处理好的截图,之前的忘记截图了)
说明:
以上截图中,当时的情况是rds_pay定时任务备份失败,不光是定时任务失败,单独执行脚本也失败!
ORA-31626: job does not exist ORA-31650: timeout waiting for master process response
处理思路:
由于单独在cmd窗口执行命令都报错(用了db_link),在本机使用plsql通过db_link查询没有问题
说明通过dblink访问没有问题,即网络没有问题,dblink没有问题,以及12c的库没有问题,所以问题在本地库11G上,以下是通过support查找到的几种情况:
1.aq_tm_processes 参数
10g这个参数设置0-10,11g范围是0-40,当时本地数据库设置的是4,我设置成16,Oracle官方不建议设置成0,不能够进行监视;修改成16后,立马生效,还是同样的报错,所以,很明显不是该参数设置偏小的问题。
2.升级后的问题(这个排除,没有进行升级不一致产生的,需要重新执行catalog.sql and catproc.sql来配置后)
3.rac数据库没有设置clsuter=no (很明显不是rac数据库,排除)
4. SGA设置可能偏小
查看了support文档,有提到至少sga为1G,但是结合现实中的情况,有接近10个定时任务的窗口,每个任务1G+,那么就定时任务耗费的SGA就有10G+;
整个memory_max_target 为17G,明显偏小(10个备份定时任务),在设置本地11g数据库memory_max_target为30g(服务器内存64G,先试一试30G,最大设置成物理内存的80%),重启后,就能够正常备份,问题得到解决。
5.触发未知的bug(11.2.0.1通过DBLINK导出的12.1.0.2.0数据库数据)
既然4解决了,那就不是BUG了。
总结:
本次出现ORA-31626: job does not exist ORA-31650: timeout waiting for master process response报错的原因是SGA过小,虽然support文档有提到至少1G,但是这个只是一个思路,并不是真的只有1G就够了,但是我也是想了很久才打算调整内存参数的;
顺便说一下如果有提示 ORA-31634: job already exists;sys_export_开头的表太多,需要清理:
SELECT owner_name, job_name, rtrim(operation) "OPERATION",
rtrim(job_mode) "JOB_MODE", state, attached_sessions
FROM dba_datapump_jobs
WHERE job_name NOT LIKE 'BIN$%'
ORDER BY 1,2;
其中state为not running状态的直接删除就行,executing状态的表不能够删除。删除后就可以备份了。