oracle 11g 自动任务未按计划执行的排查
标签: oracle 11g 自动任务未按计划执行的排查 Oracle博客 51CTO博客
2023-07-15 18:24:41 124浏览
适用范围
操作系统:CentOS 7.6
数据库:Oracle 11.2.0.1及更高版本
问题概述
分析oracle 11g的自动调度任务未按计划执行的原因
问题原因
可能的原因有
1)job_queue_processes参数配置为0
2)autotask client处于禁用状态
3)scheduler window处于禁用状态
4)dba_scheduler_windows中查询到的last_start_date不正确等
解决方案
1.确保JOB_QUEUE_PROCESSES设置为非0及STATISTICS_LEVEL设置为TYPICAL或ALL
show parameter job_queue_processes
show parameter statistics_level
如果需要修改,可执行以下命令
alter system set job_queue_processes=1000 scope=both;
alter system set statistics_level = all scope=both;
2.检查autotask client 是否被禁用
select client_name,window_group,status from dba_autotask_client;
如果处于禁用状态,可执行以下命令启用
exec dbms_auto_task_admin.enable('auto optimizer stats collection', null, null);
3.检查是否为特定窗口禁用了自动任务
select window_name,optimizer_stats,segment_advisor,sql_tune_advisor from dba_autotask_window_clients;
如果需要在特定窗口上启用自动任务客户端,可执行
exec dbms_auto_task_admin.enable('auto optimizer stats collection', null, 'MONDAY_WINDOW');
4.检查是否有scheduler window 被禁用
select window_name, enabled from dba_scheduler_windows;
如需要启用,可执行
exec dbms_scheduler.enable('SATURDAY_WINDOW');
5.检查是否有scheduler window 活跃且LAST_START_DATE 是前几天
select window_name ,last_start_date,enabled ,active from dba_scheduler_windows;
检查alert日志,检查是否有窗口处于活跃状态时数据库被关闭情况,如果窗口组中的一个窗口已经打开,并且创建了一个指向该活动窗口组的新作业,则该作业不会启动,直到窗口组中的下一个窗口打开。
可以手动关闭活跃的窗口
execute dbms_scheduler.close_window ('SATURDAY_WINDOW');
6.如果DBA_AUTOTASK_WINDOW_CLIENTS.WINDOW_NEXT_TIME 显示过去的日期,可以删除并重新创建窗口
select WINDOW_NEXT_TIME from DBA_AUTOTASK_WINDOW_CLIENTS;
执行删除窗口脚本
@?/RDBMS/ADMIN/CATNOMWN.SQL
或手动执行
EXECUTE DBMS_SCHEDULER.DROP_WINDOW('MONDAY_WINDOW');
EXECUTE DBMS_SCHEDULER.DROP_WINDOW('TUESDAY_WINDOW');
EXECUTE DBMS_SCHEDULER.DROP_WINDOW('WEDNESDAY_WINDOW');
EXECUTE DBMS_SCHEDULER.DROP_WINDOW('THURSDAY_WINDOW');
EXECUTE DBMS_SCHEDULER.DROP_WINDOW('FRIDAY_WINDOW');
EXECUTE DBMS_SCHEDULER.DROP_WINDOW('SATURDAY_WINDOW');
EXECUTE DBMS_SCHEDULER.DROP_WINDOW('SUNDAY_WINDOW');
重新创建窗口
@?/RDBMS/ADMIN/CATMWIN.SQL
7. 如果任务停止工作,那么上次成功(或失败)的作业可能仍然卡住,如果 DBA_AUTOTASK_TASK 显示作业始终存在, 则尝试删除该作业。
exec dbms_scheduler.drop_job (job_name => '<job_name>',force =>true);
其中job_name来自 DBA_SCHEDULER_JOB_RUN_DETAILS.JOB_NAME
8.检查"_enable_automatic_maintenance" 是否被设置为0
show parameter "_enable_automatic_maintenance"
9. 如果窗口打开时间很短,则默认维护作业失败
select window_name,repeat_interval,duration from dba_scheduler_windows;
可以调整窗口的持续时间
exec dbms_scheduler.set_attribute('MONDAY_WINDOW','DURATION','+000 04:00:00');
10. oracle 10g的窗口WEEKNIGHT_WINDOW 和 WEEKEND_WINDOW仍然启用
在oracle 11g中,这些窗口应该被禁用
select window_name, enabled from dba_scheduler_windows where window_name in ('WEEKNIGHT_WINDOW','WEEKEND_WINDOW');
禁用方法
exec dbms_scheduler.disable('WEEKNIGHT_WINDOW');
exec dbms_scheduler.disable('WEEKEND_WINDOW');
11.如果以上方法均不能解决,可尝试重新配置调度程序
检查/等待所有调度程序作业完成
select owner,job_name from dba_scheduler_running_jobs;
禁用调度任务
exec dbms_scheduler.set_scheduler_attribute('SCHEDULER_DISABLED', 'TRUE');
alter system set job_queue_processes=0;
exec dbms_ijob.set_enabled(FALSE);
刷新shared_pool(不要在应用运行时操作)
alter system flush shared_pool;
alter system flush shared_pool;
启用调度程序
exec dbms_ijob.set_enabled(TRUE);
alter system set job_queue_processes=<value>;
exec dbms_scheduler.set_scheduler_attribute('SCHEDULER_DISABLED', 'FALSE');
12. 确保SYSAUX表空间没有达到最大值
参考文档
11g Autotask Jobs Are Not Running as Scheduled. (Doc ID 2084941.1)
好博客就要一起分享哦!分享海报
此处可发布评论
评论(0)展开评论
展开评论