当前位置: 首页 > 图文教程 > 数据库 > Oracle > 如何解决JOB的Interval输入参数过长

Oracle
Oracle数据库技术(32)
Oracle数据库技术(33)
Oracle数据库技术(34)
Oracle数据库技术(35)
Oracle数据库技术(36)
Oracle数据安全面面观
Oracle数据操作和控制语言详解
Oracle数据库数据对象分析
解析Oracle 8i/9i的计划稳定性
使用Oracle实现实时通信
Oracle数据库中索引的维护
Oracle数据库游标使用大全
Oracle9i中监视索引的使用
在Oracle9i中使用多种Block Size
监控Oracle数据库的常用shell脚本
Performance Improvement Tips for Oracle on UNIX
Raw Partitions and Windows NT
How to use OS commands to diagnose Database Performance issues?
Raw Devices and Oracle - 20 Common Questions and Answers
Monitor Oracle Resource Consumption in UNIX

Oracle 中的 如何解决JOB的Interval输入参数过长


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-31   浏览: 143 ::
收藏到网摘: n/a

本文根据一段错误代码从而来分析如何解决JOB的Interval输入参数过长的问题。

给出的运行JOB的PL/SQL代码为:


DECLAREjob BINARY_INTEGER := :job;next_date DATE := :mydate;broken BOOLEAN := FALSE;BEGINWHAT:mydate := next_date;IF broken THEN :b := 1; ELSE :b :=0; END IF; END;

并说明了如何使用NEXT_DATE作为存储过程的输出参数,来指定下次JOB的下次运行时间。

第一次看到这里的时候,一方面是感叹这种内部的东西,一般人是无法得到的,只有Tom这种内部人士才能得到;另一方面是佩服Tom的功力,说实话,即使是把代码给我,我也想不出这么巧妙的方法。

这次重读这部分内容,有了一点新的想法,对于BROKEN变量,是否也可以做点什么?

采用和上面类似的方法,可以控制JOB的行为,使JOB成功运行一次后,就自动停止不在执行。由于普通的一次性JOB,在运行后就从JOB视图中消失了,如果希望留下运行信息,则必须使用日志表,十分的麻烦。而采用下面的方法处理一次性JOB,可以方便将JOB的运行信息保留下来:

SQL> CONN /@YANGTK AS SYSDBA

已连接。

SQL> GRANT EXECUTE ON DBMS_LOCK TO YANGTK;

授权成功。

SQL> CONN YANGTK/YANGTK@YANGTK

已连接。

SQL> CREATE OR REPLACE PROCEDURE P_TEST (P_BROKEN OUT BOOLEAN) AS2 BEGIN3 P_BROKEN := TRUE;4 DBMS_LOCK.SLEEP(5);5 END; 6 /

过程已创建。

SQL> DECLARE2 V_JOB NUMBER;3 BEGIN4 DBMS_JOB.SUBMIT(V_JOB, 'P_TEST(BROKEN);', SYSDATE, 'SYSDATE + 1/1440');5 COMMIT;6 END; 7 /

PL/SQL 过程已成功完成。

SQL> COL WHAT FORMAT A30SQL> SELECT JOB, WHAT, TOTAL_TIME, BROKEN, FAILURES FROM USER_JOBS;JOB WHAT TOTAL_TIME B FA