问题:创建一个oracle job,而job每隔5秒钟运行一次,但是完成job的调用需要比5秒更长的时间,那么oracle会用怎么样的运行机制呢?
模拟:1,创建一个临时表用于记录相应的job调用时间。语句:create table job_test (name varchar2(20),now_time timestamp);
2,创建一个过程向表中插入数据。
create or replace procedure job_test_pro
is
begin
insert into job_test values('开始时间',sysdate);
commit;
dbms_lock.sleep(17);/*grant execute on dbms_lock to user*/
insert into job_test values('结束时间',sysdate);
commit;
end job_test_pro;
3,创建一个job。
SQL> var job1 number;
SQL> begin
2 sys.dbms_job.submit(job => :job1,what => 'job_test_pro;',next_date => sysdate,interval => 'sysdate+5/24/60/60');
3 commit;
4 end;
5 /
PL/SQL procedure successfully completed
job1
---------
2
4,查询表中的数据.
1开始时间 26-3月 -12 02.10.28.000000 下午
2结束时间 26-3月 -12 02.10.45.000000 下午
3开始时间 26-3月 -12 02.10.48.000000 下午
4结束时间 26-3月 -12 02.11.05.000000 下午
5开始时间 26-3月 -12 02.11.08.000000 下午
6结束时间 26-3月 -12 02.11.25.000000 下午
7开始时间 26-3月 -12 02.11.28.000000 下午
8结束时间 26-3月 -12 02.11.45.000000 下午
9开始时间 26-3月 -12 02.11.48.000000 下午
10结束时间 26-3月 -12 02.12.05.000000 下午
11开始时间 26-3月 -12 02.12.08.000000 下午
12结束时间 26-3月 -12 02.12.25.000000 下午
13开始时间 26-3月 -12 02.12.28.000000 下午
14结束时间 26-3月 -12 02.12.45.000000 下午
15开始时间 26-3月 -12 02.12.48.000000 下午
16结束时间 26-3月 -12 02.13.05.000000 下午
17开始时间 26-3月 -12 02.13.08.000000 下午
18结束时间 26-3月 -12 02.13.25.000000 下午
19开始时间 26-3月 -12 02.13.28.000000 下午
20结束时间 26-3月 -12 02.13.45.000000 下午
21开始时间 26-3月 -12 02.13.48.000000 下午
22结束时间 26-3月 -12 02.14.05.000000 下午
23开始时间 26-3月 -12 02.14.09.000000 下午
24结束时间 26-3月 -12 02.14.26.000000 下午
25开始时间 26-3月 -12 02.14.29.000000 下午
26结束时间 26-3月 -12 02.14.46.000000 下午
27开始时间 26-3月 -12 02.14.49.000000 下午
28结束时间 26-3月 -12 02.15.06.000000 下午
29开始时间 26-3月 -12 02.15.09.000000 下午
30结束时间 26-3月 -12 02.15.26.000000 下午
31开始时间 26-3月 -12 02.15.29.000000 下午
32结束时间 26-3月 -12 02.15.46.000000 下午
33开始时间 26-3月 -12 02.15.49.000000 下午
34结束时间 26-3月 -12 02.16.06.000000 下午
35开始时间 26-3月 -12 02.16.09.000000 下午
36结束时间 26-3月 -12 02.16.26.000000 下午
5,观察结果可以发现,oracle在job完成后3秒开始进行下一次的调用。(但是为什么是3秒呢?而不是5秒。猜测,可以能是运行17秒与5秒进行相除取整的结果??)
6,重新设置oracle的睡眠时间,设置为21秒,看是否是运行完成后4秒进行调用的。
create or replace procedure job_test_pro
is
begin
insert into job_test values('开始时间',sysdate);
commit;
dbms_lock.sleep(21);/*grant execute on dbms_lock to user*/
insert into job_test values('结束时间',sysdate);
commit;
end job_test_pro;
7,查询表中的结果
37开始时间26-3月 -12 02.16.29.000000 下午
38结束时间 26-3月 -12 02.16.50.000000 下午
39开始时间 26-3月 -12 02.16.54.000000 下午
40结束时间 26-3月 -12 02.17.15.000000 下午
41开始时间 26-3月 -12 02.17.19.000000 下午
42结束时间 26-3月 -12 02.17.40.000000 下午
43开始时间 26-3月 -12 02.17.44.000000 下午
44结束时间 26-3月 -12 02.18.05.000000 下午
45开始时间 26-3月 -12 02.18.09.000000 下午
46结束时间 26-3月 -12 02.18.30.000000 下午
47开始时间 26-3月 -12 02.18.34.000000 下午
48结束时间 26-3月 -12 02.18.55.000000 下午
49开始时间 26-3月 -12 02.18.59.000000 下午
50结束时间 26-3月 -12 02.19.20.000000 下午
51开始时间 26-3月 -12 02.19.24.000000 下午
52结束时间 26-3月 -12 02.19.45.000000 下午
53开始时间 26-3月 -12 02.19.49.000000 下午
54结束时间 26-3月 -12 02.20.10.000000 下午
55开始时间 26-3月 -12 02.20.14.000000 下午
56结束时间 26-3月 -12 02.20.35.000000 下午
57开始时间 26-3月 -12 02.20.39.000000 下午
58结束时间 26-3月 -12 02.21.00.000000 下午
59开始时间 26-3月 -12 02.21.04.000000 下午
60结束时间 26-3月 -12 02.21.25.000000 下午
61开始时间 26-3月 -12 02.21.29.000000 下午
62结束时间 26-3月 -12 02.21.50.000000 下午
63开始时间 26-3月 -12 02.21.54.000000 下午
64结束时间 26-3月 -12 02.22.15.000000 下午
65开始时间 26-3月 -12 02.22.19.000000 下午
66结束时间 26-3月 -12 02.22.40.000000 下午
67开始时间 26-3月 -12 02.22.44.000000 下午
68结束时间 26-3月 -12 02.23.05.000000 下午
69开始时间 26-3月 -12 02.23.09.000000 下午
70结束时间 26-3月 -12 02.23.30.000000 下午
71开始时间 26-3月 -12 02.23.59.000000 下午
72结束时间 26-3月 -12 02.24.20.000000 下午
73开始时间 26-3月 -12 02.24.24.000000 下午
74结束时间 26-3月 -12 02.24.45.000000 下午
75开始时间 26-3月 -12 02.24.49.000000 下午
76结束时间 26-3月 -12 02.25.10.000000 下午
77开始时间 26-3月 -12 02.25.14.000000 下午
78结束时间 26-3月 -12 02.25.35.000000 下午
79开始时间 26-3月 -12 02.25.39.000000 下午
80结束时间 26-3月 -12 02.26.00.000000 下午
81开始时间 26-3月 -12 02.26.04.000000 下午
82结束时间 26-3月 -12 02.26.25.000000 下午
83开始时间 26-3月 -12 02.26.29.000000 下午
84结束时间 26-3月 -12 02.26.50.000000 下午
85开始时间 26-3月 -12 02.26.54.000000 下午
86结束时间 26-3月 -12 02.27.15.000000 下午
87开始时间 26-3月 -12 02.27.19.000000 下午
88结束时间 26-3月 -12 02.27.40.000000 下午
89开始时间 26-3月 -12 02.27.44.000000 下午
90结束时间 26-3月 -12 02.28.05.000000 下午
91开始时间 26-3月 -12 02.28.09.000000 下午
92结束时间 26-3月 -12 02.28.30.000000 下午
93开始时间 26-3月 -12 02.28.34.000000 下午
94结束时间 26-3月 -12 02.28.55.000000 下午
95开始时间 26-3月 -12 02.29.24.000000 下午
96结束时间 26-3月 -12 02.29.45.000000 下午
97开始时间 26-3月 -12 02.29.49.000000 下午
98结束时间 26-3月 -12 02.30.10.000000 下午
99开始时间 26-3月 -12 02.30.14.000000 下午
100结束时间 26-3月 -12 02.30.35.000000 下午
101开始时间 26-3月 -12 02.30.39.000000 下午
102结束时间 26-3月 -12 02.31.00.000000 下午
103开始时间 26-3月 -12 02.31.04.000000 下午
104结束时间 26-3月 -12 02.31.25.000000 下午
105开始时间 26-3月 -12 02.31.29.000000 下午
106结束时间 26-3月 -12 02.31.50.000000 下午
107开始时间 26-3月 -12 02.31.54.000000 下午
108结束时间 26-3月 -12 02.32.15.000000 下午
109开始时间 26-3月 -12 02.32.19.000000 下午
110结束时间 26-3月 -12 02.32.40.000000 下午
111开始时间 26-3月 -12 02.32.44.000000 下午
112开始时间 26-3月 -12 02.23.34.000000 下午
113结束时间 26-3月 -12 02.23.55.000000 下午
114开始时间 26-3月 -12 02.28.59.000000 下午
115结束时间 26-3月 -12 02.29.20.000000 下午
可以看到真的是每隔4秒钟才进行的调用。这是巧合呢还是oracle job是这个设计的。请大侠们指点,谢谢。