我通过pl/sql developer,
或者,编程  sys.dbms_job.broken(job => 1, broken => true) 
来设置job为broken,当时的确是成功的,这个job的确被broken了。但是,过了几分钟后,这个job又自动变为了broken = false请大家帮我分析分析,是什么原因?

解决方案 »

  1.   

    //这里有个范例你参考一下吧Create   Or   Replace   Procedure   Auto_Cljs_Job   (v_timestr   In   Varchar2,v_jobno   Out   Varchar2,v_msg   Out   Varchar2)   Is  
       
      /******************************************************************************  
            PURPOSE:     自动潮流计算Job的建立与更改      
       
            REVISIONS:  
            Ver                 Date                 Author                       Description  
            ---------     ----------     ---------------     ------------------------------------  
            1.0                 2003-10-17       Fred   Zhang               1.   Created   this   procedure.  
      ******************************************************************************/  
      jobno   Integer;  
      jobid   Integer;  
      Begin  
          Select   job   Into   jobid   From   all_jobs   Where   what='AUTO_CLJS;';                      
              dbms_job.Change(jobid,'AUTO_CLJS;',To_Date(To_Char(Sysdate,'yyyy-mm-dd')||'   '||V_timestr,'yyyy-mm-dd   hh24:mi:ss'),'trunc(sysdate,''mi'')+1');  
              Commit;  
              v_jobno:=jobid;  
              v_msg:='恭喜你!自动计算设定已经成功更改!';    
              Exception   When   No_Data_Found   Then  
                  dbms_job.submit(jobid,'AUTO_CLJS;',To_Date(To_Char(Sysdate,'yyyy-mm-dd')||'   '||V_timestr,'yyyy-mm-dd   hh24:mi:ss'),'trunc(sysdate,''mi'')+1');  
                  Commit;  
                  v_jobno:=jobid;  
                  v_msg:='恭喜你!自动计算已经成功设定!';                      
       
      End     Auto_Cljs_Job;  
       
       
       
       
       
      CREATE   OR   REPLACE   PROCEDURE   Auto_Cljs_Job_Start_Stop   (result   OUT   VARCHAR2)   IS  
      tmpVar   NUMBER;  
      /******************************************************************************  
            PURPOSE:       自动潮流计算Job的启动与停止  
       
            REVISIONS:  
            Ver                 Date                 Author                       Description  
            ---------     ----------     ---------------     ------------------------------------  
            1.0                 2003-10-18       Fred   Zhang               1.   Created   this   procedure.  
      ******************************************************************************/  
      jobid   INTEGER;  
      job_status   VARCHAR2(1);  
      BEGIN  
          SELECT   job,broken   INTO   jobid,job_status   FROM   all_jobs   WHERE   what='AUTO_CLJS;';  
                      IF   job_status='N'   THEN  
                              dbms_job.broken(jobid,TRUE);  
                              COMMIT;  
                              result:='恭喜你!自动计算设定已经停止!';  
                      ELSE  
                              dbms_job.broken(jobid,FALSE);  
                              COMMIT;  
                              result:='恭喜你!自动计算设定已经开始!';  
                      END   IF;  
                      EXCEPTION    
                          WHEN   NO_DATA_FOUND   THEN    
                                    result:='对不起,你还没有设定此Job!';      
          WHEN   OTHERS   THEN  
                                    NULL;  
      END   Auto_Cljs_Job_Start_Stop;  
      /
      

  2.   

    当然已经commit;
    只不过是非关键,这里没有写而已。
      

  3.   

    如果作业标记为broken,那么Oracle不能执行该作。
    但是,如果通过手动或者其他事件调用执行了作业,
    那么broken会自动变为false,标记为作业有效。
      

  4.   

    to WangZWang(先来) 
    -------------------------
    奇怪的是,没有手动或者其他事件调用执行了该作业,
    但是几分钟后,该作业的broken会自动变为false,标记为作业有效。
      

  5.   

    你好好查一下,应该是有外部因素的影响,或者把Job拿到Oracle Server上去建立看一下情况。
      

  6.   

    查了半天,查不出原因。不查了,
    直接用dbms_job.remove 得了。