先说结论:请好好的阅读oracle的alert日志文件,里面的错误提示是很清楚的,精确到行;在plsql里运行作业出错的提示是简略的,容易给人浮躁的心态;如果在ssh工具显示中文为乱码,请设置好工具的字符集问题。
数据库: 12c 发布 1
错误代码: ORA-12011
描述: 无法执行 %s 作业
原因: dbms_ijob.run中从一个或多个应运行的作业中捕获了一个错误。
动作: 查看警报日志以了解有关哪些作业失败以及原因的详细信息。
数据库: 12c 发布 1
错误代码: ORA-12011
描述: execution of string jobs failed
原因: An error was caught in dbms_ijob.run from one or more jobs which were due to be run.
动作: Look at the alert log for details on which jobs failed and why.
事件过程:
现象:有个作业自动broken,重建过一分钟后也一样broken。
排查:1,手工执行里面的存储过程,没有报错。2,手工运行作业提示ORA-12011(plsql里面提示真是简略,显示不了的用三个点代替);3,搜索ORA-12011没找到对的方案,以为是没授权执行作业的权限,给用户授权,结果一样报ORA-12011错误;4,对比相同类型的用户的dba_tab_privs表权限、dba_sys_privs系统权限、dba_role_privs角色权限,发现设置都一样。
最终手段:ssh到服务器上看alert日志,看到最新的日志内容,提示是存储过程第n行出错,还有ORA-01403: 未找到数据。通过对第n行进行业务排查,确实是没有数据。后面就是解决没数据的事情略。