问题:创建一个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是这个设计的。请大侠们指点,谢谢。