2012-12-19 56 views
1

我正在使用Oracle 10g XE,並且正在嘗試爲存儲過程創建計劃作業。我授予權hr如何在Oracle XE中安排存儲過程?

grant create job to hr ; 
grant create external job to hr ; 

然後記錄爲hr,並創建一個作業

begin 
    dbms_scheduler.create_job(
     job_name => 'THIS_IS_DA_NAME', 
     job_type => 'STORED_PROCEDURE', 
     job_action => 'PROC_MYSTOREDPROC', 
     start_date => sysdate + (5/(24*60)), 
     repeat_interval => 'FREQ=MINUTELY; interval=1', 
     enabled => TRUE, 
     comments => 'Runtime: Every day every minute'); 
end; 

這種成功。但作業不顯示爲dba_scheduler_job_run_detailsdba_scheduler_job_log

select log_date, job_name, status, req_start_date, actual_start_date, run_duration 
from dba_scheduler_job_run_details 

select log_date, job_name, status 
from dba_scheduler_job_log 

正是在這個視圖中列出/表

select * 
from dba_scheduler_jobs 

有什麼問題就在這裏,爲什麼存儲過程將不會運行?它運行正常使用

exec PROC_MYSTOREDPROC 

此外,正在運行的任務瞬間的作品好了

EXEC dbms_scheduler.run_job('hr.THIS_IS_DA_NAME'); 
+0

你提交了嗎? –

+0

提交什麼時候?創造工作之後還是什麼? – jrara

回答

1

DBMS_SCHEDULER documentation

JOB_QUEUE_PROCESSES初始化參數指定可以創建的最大進程數執行工作。從Oracle數據庫11g第2版(11.2)開始,JOB_QUEUE_PROCESSES適用於DBMS_SCHEDULER作業。將此參數設置爲0將禁用DBMS_SCHEDULER作業。

所以一定要確保JOB_QUEUE_PROCESSES初始化參數設置爲一個值大於1

你也需要承諾觸發你的工作要求的驗證。

一旦COMMITED,作業將被安排在USER_SCHEDULER_JOBS觀點:

SQL> select job_name, start_date from user_scheduler_jobs; 

JOB_NAME  START_DATE 
--------------- ----------------------------------- 
THIS_IS_DA_NAME 19-DEC-12 08.15.47.000000 AM -06:00 

當然,既然你問它被安排在未來的五分鐘,就會出現在沒有行USER_SCHEDULER_JOB_LOG還,但如果你等待五分鐘,你應該看到行:

SQL> select job_name, log_date, status from user_scheduler_job_log 
     WHERE job_name = 'THIS_IS_DA_NAME'; 

JOB_NAME  LOG_DATE       STATUS 
--------------- ----------------------------------- ------------- 
THIS_IS_DA_NAME 19-DEC-12 08.15.47.009921 AM -06:00 SUCCEEDED 
THIS_IS_DA_NAME 19-DEC-12 08.16.47.009534 AM -06:00 SUCCEEDED 
+0

謝謝,我使用10g XE,job_queue_process似乎具有值4. – jrara

0
DBMS_SCHEDULER.enable ('THIS_IS_DA_NAME'); 

,然後嘗試你的代碼或者這樣:

begin 
    dbms_scheduler.create_job(
     job_name => 'THIS_IS_DA_NAME', 
     job_type => 'PLSQL_BLOCK', 
     job_action => 'BEGIN PROC_MYSTOREDPROC; END;', 
     start_date => sysdate + (5/(24*60)), 
     repeat_interval => 'FREQ=MINUTELY; interval=1', 
     enabled => TRUE, 
     comments => 'Runtime: Every day every minute'); 
end; 
+0

您的第一條語句是否應該啓用作業THIS_IS_DA_NAME而不是PROC_MYSTOREDPROC? – jrara

+0

@jrara oh yes,sorry DBMS_SCHEDULER.enable('THIS_IS_DA_NAME'); –

+0

這個創建工作聲明的作品,但調度程序不會觸發該過程。 – jrara