最近处理了几个关于scheduler和autotask的小问题,这里总结一下。
查dba_scheduler_window_log也没看到对应的job跑起来。这个时候,很有可能就是遇到scheduler的窗口冲突了。可以看看在dba_scheduler_window_log中在那个时刻是否有其他的window在跑。
oracle建议合理的安排scheduler的窗口,在某个时间内,不应该有2个窗口重叠。
不过,oracle还是允许重叠的窗口,但是重叠的(冲突的)窗口遵循以下原则:
1 2 3 4 5 |
1)如果窗口没有优先级的差别,那么active的那个窗口保持active状态。如果冲突的窗口有优先级,那么low优先级的窗口会被关闭,high优先级的窗口会打开。 2)在上一个window结束的时候,后续的冲突的窗口,会让优先级高的打开,如果优先级一样,这考虑剩余时间比例高的那个窗口会被打开。 3)当一个open的窗口被drop时,该窗口会被自动的close,在那时刻的冲突窗口情况,请参照前一条规则。 |
参考文档:Scheduled Job That Works Does Not Start In Window [ID 742683.1]
oracle在11g中预先定义了3个autotask,关于他们自动的执行的时间,我们可以这样去找(autotask用到了我们平时不常用的scheduler的window group,所以不太好找。)
以automatic sql tunning advisor为例:
1 2 3 4 5 6 7 8 9 10 11 12 |
SQL> select * from DBA_AUTOTASK_CLIENT; CLIENT_NAME WINDOW_GROUP ------------------------------------------------------ --------------------- auto optimizer stats collection ORA$AT_WGRP_OS auto space advisor ORA$AT_WGRP_SA sql tuning advisor ORA$AT_WGRP_SQ SQL> SQL> SQL> SQL> |
找到sql tuning advisor对应的window group为ORA$AT_WGRP_SQ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
SQL> SELECT * FROM DBA_SCHEDULER_WINGROUP_MEMBERS WHERE WINDOW_GROUP_NAME='ORA$AT_WGRP_SQ'; WINDOW_GROUP_NAME WINDOW_NAME ------------------------------ ------------------------------ ORA$AT_WGRP_SQ MONDAY_WINDOW ORA$AT_WGRP_SQ TUESDAY_WINDOW ORA$AT_WGRP_SQ WEDNESDAY_WINDOW ORA$AT_WGRP_SQ THURSDAY_WINDOW ORA$AT_WGRP_SQ FRIDAY_WINDOW ORA$AT_WGRP_SQ SATURDAY_WINDOW ORA$AT_WGRP_SQ SUNDAY_WINDOW 7 rows selected SQL> |
找到对应window group的window name为上述几个window
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
SQL> SELECT WINDOW_NAME,REPEAT_INTERVAL,b.last_start_date,b.next_start_date FROM DBA_SCHEDULER_WINDOWS b 2 where window_name not in ('WEEKNIGHT_WINDOW','WEEKEND_WINDOW','EVOLVE_BASELINE_WINDOW') 3 / WINDOW_NAME REPEAT_INTERVAL LAST_START_DATE NEXT_START_DATE ------------------------------ -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- MONDAY_WINDOW freq=daily;byday=MON;byhour=22;byminute=0; bysecond=0 10-6月 -13 10.00.00.007730 下午 PRC 17-6月 -13 10.00.00.000000 下午 PRC TUESDAY_WINDOW freq=daily;byday=TUE;byhour=22;byminute=0; bysecond=0 11-6月 -13 10.00.00.005195 下午 PRC 18-6月 -13 10.00.00.000000 下午 PRC WEDNESDAY_WINDOW freq=daily;byday=WED;byhour=22;byminute=0; bysecond=0 12-6月 -13 10.00.00.004158 下午 PRC 19-6月 -13 10.00.00.000000 下午 PRC THURSDAY_WINDOW freq=daily;byday=THU;byhour=22;byminute=0; bysecond=0 06-6月 -13 10.00.00.001555 下午 PRC 13-6月 -13 10.00.00.000000 下午 PRC FRIDAY_WINDOW freq=daily;byday=FRI;byhour=22;byminute=0; bysecond=0 07-6月 -13 10.00.00.008399 下午 PRC 14-6月 -13 10.00.00.000000 下午 PRC SATURDAY_WINDOW freq=daily;byday=SAT;byhour=6;byminute=0; bysecond=0 08-6月 -13 07.00.00.009041 上午 PRC 15-6月 -13 06.00.00.000000 上午 PRC SUNDAY_WINDOW freq=daily;byday=SUN;byhour=6;byminute=0; bysecond=0 09-6月 -13 06.59.58.513700 上午 PRC 16-6月 -13 06.00.00.000000 上午 PRC 7 rows selected SQL> |
找到这几个window name对应repeat interval,就能看到他们是什么时候运行的了。
此外,我们还能看看对应的log中执行的情况,查询dba_autotask_client_history:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
SQL> select client_name,window_name,window_start_time,window_end_time from dba_autotask_client_history where client_name='sql tuning advisor' 2 and rownum<=20 3 order by 3 desc 4 / CLIENT_NAME WINDOW_NAME WINDOW_START_TIME WINDOW_END_TIME -------------------------------- -------------------------------- ---------------------------------------------- ---------------------------------------- sql tuning advisor MONDAY_WINDOW 10-6月 -13 10.00.00.022170 下午 +08:00 11-6月 -13 02.00.00.008678 上午 +08:00 sql tuning advisor SUNDAY_WINDOW 09-6月 -13 06.59.58.516903 上午 +08:00 10-6月 -13 02.00.00.005939 上午 +08:00 sql tuning advisor SATURDAY_WINDOW 08-6月 -13 07.00.00.032819 上午 +08:00 09-6月 -13 02.00.00.006912 上午 +08:00 sql tuning advisor FRIDAY_WINDOW 07-6月 -13 10.00.00.052889 下午 +08:00 08-6月 -13 02.00.00.064854 上午 +08:00 sql tuning advisor THURSDAY_WINDOW 06-6月 -13 10.00.00.020374 下午 +08:00 07-6月 -13 02.00.00.004536 上午 +08:00 sql tuning advisor MONDAY_WINDOW 03-6月 -13 10.00.00.045524 下午 +08:00 04-6月 -13 02.00.00.002239 上午 +08:00 sql tuning advisor SUNDAY_WINDOW 02-6月 -13 06.59.59.764631 上午 +08:00 03-6月 -13 02.00.00.007211 上午 +08:00 sql tuning advisor SATURDAY_WINDOW 01-6月 -13 06.59.58.450452 上午 +08:00 02-6月 -13 02.00.00.010440 上午 +08:00 sql tuning advisor FRIDAY_WINDOW 31-5月 -13 10.00.00.061877 下午 +08:00 01-6月 -13 02.00.00.036156 上午 +08:00 sql tuning advisor THURSDAY_WINDOW 30-5月 -13 10.00.00.068163 下午 +08:00 31-5月 -13 02.00.00.008425 上午 +08:00 sql tuning advisor MONDAY_WINDOW 27-5月 -13 10.00.00.061620 下午 +08:00 28-5月 -13 02.00.00.011094 上午 +08:00 sql tuning advisor SUNDAY_WINDOW 26-5月 -13 07.00.00.005540 上午 +08:00 27-5月 -13 02.00.00.008820 上午 +08:00 sql tuning advisor SATURDAY_WINDOW 25-5月 -13 07.00.00.048218 上午 +08:00 26-5月 -13 02.00.00.002487 上午 +08:00 sql tuning advisor FRIDAY_WINDOW 24-5月 -13 10.00.00.006438 下午 +08:00 25-5月 -13 02.00.00.021833 上午 +08:00 sql tuning advisor THURSDAY_WINDOW 23-5月 -13 10.00.00.007468 下午 +08:00 24-5月 -13 02.00.00.008387 上午 +08:00 sql tuning advisor MONDAY_WINDOW 20-5月 -13 10.00.00.058561 下午 +08:00 21-5月 -13 02.00.00.009699 上午 +08:00 sql tuning advisor SUNDAY_WINDOW 19-5月 -13 06.59.59.307973 上午 +08:00 20-5月 -13 02.00.00.008654 上午 +08:00 sql tuning advisor SATURDAY_WINDOW 18-5月 -13 07.00.00.020740 上午 +08:00 19-5月 -13 02.00.00.005401 上午 +08:00 sql tuning advisor FRIDAY_WINDOW 17-5月 -13 10.00.00.039666 下午 +08:00 18-5月 -13 02.00.00.024188 上午 +08:00 sql tuning advisor THURSDAY_WINDOW 16-5月 -13 10.00.00.047008 下午 +08:00 17-5月 -13 02.00.00.003090 上午 +08:00 20 rows selected SQL> |
总结:
DBA_AUTOTASK_CLIENT(window_group) --> DBA_SCHEDULER_WINGROUP_MEMBERS(window_name) --> DBA_SCHEDULER_WINDOWS(repeat_interval)