Oracle jobs和历史执行计划的获取

Oracle jobs:在特定的时间间隔下,数据库自动完成指定动作的功能。
创建jobs的方法:
begin
 dbms_job.submit(:job,
 'prc_name;',
 sysdate,
 'sysdate+1/60/24');
commit;
end;
可以用dbms_job.submit方法直接创建:
其中 :job是使用绑定变量为job自动给一个唯一的job编号,
     Prc_name是pl/sql块,或者是存储过程等,存储过程必须在创建job前先创建好
     Sysdate是job的开始时间,
     sysdate+1/60/24是job的时间间隔,是指每隔一分钟运行一次(interval)。
其中interval参数值的设置:
每星期六和日早上6点10分 'TRUNC(LEAST(NEXT_DAY(SYSDATE, ''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)' 
每天运行一次                   'SYSDATE + 1'
每小时运行一次                 'SYSDATE + 1/24'
每10分钟运行一次               'SYSDATE + 10/(60*24)'
每30秒运行一次                 'SYSDATE + 30/(60*24*60)'
每隔一星期运行一次             'SYSDATE + 7'
每个月最后一天运行一次         'TRUNC(LAST_DAY(ADD_MONTHS(SYSDATE,1))) + 23/24'
每年1月1号零时                 'TRUNC(LAST_DAY(TO_DATE(EXTRACT(YEAR FROM SYSDATE)||'12'||'01','YYYY-MM-DD'))+1)'
每天午夜12点                   'TRUNC(SYSDATE + 1)'
每天早上8点30分                'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)'
每星期二中午12点               'NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24'
每个月第一天的午夜12点         'TRUNC(LAST_DAY(SYSDATE ) + 1)'
每个月最后一天的23点           'TRUNC (LAST_DAY (SYSDATE)) + 23 / 24'
每个季度最后一天的晚上11点     'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24'
演示:
首先创建一个pl/sql存储过程prc_name:用于向Scott用户下的test表插入一行数据sysdate;
 Oracle jobs和历史执行计划的获取
开始创建jobs:
新建绑定变量job,并创建Oracle jobs,使数据库每隔一分钟插入Scott用户下的test表一行数据。
 Oracle jobs和历史执行计划的获取
创建成功后:
 Oracle jobs和历史执行计划的获取

实验成功。
删除job:
先查询出新创建的job的编号:
 Oracle jobs和历史执行计划的获取
删除job:
 Oracle jobs和历史执行计划的获取
Job删除成功。
SQL执行计划的获取:
除了一般获取执行计划的五种方式外,如果你想要的那条SQL的执行计划已经被刷新出了shared pool,那么还可以使用这种方式来获取已经被刷出shared pool的执行计划:
 Oracle jobs和历史执行计划的获取
通过这条语句将已经被刷出shared pool的SQL语句的执行计划查询出来:
 Oracle jobs和历史执行计划的获取

这样就可以得到这条语句的执行计划了。