1、首先建立一張表 該錶用來執行插入資料。
create table getsysdate(test date);
2、建立儲存過程以插入資料。
create or replace procedure insertsysdate as
begin
insert into getsysdate values (sysdate);
end ;
3、建立job設定定時
declare
job1 number;
begin
dbms_job.submit(job1,'insertsysdate;',to_date('2019-07-09 15:55:00','yyyy-mm-dd hh24:mi:ss'),'sysdate+1/1440');
commit;
end;
以上為所建立的job,job1為job名稱 ,insertsysdate為儲存過程名稱,to_date('2019-07-09 15:55:00','yyyy-mm-dd hh24:mi:ss')這段為儲存過程下次執行時間,'sysdate+1/1440' 這段為儲存過程執行時間間隔。
當我把以上所有的步驟都走完之後,發現表中並沒有新的資料,然後我又通過"select * from dba_jobs"該語句檢視新建的job,發現job是已經建立成功了的,不過上次執行時間為空。
4、而後我又通過以下語句執行job,看是否有問題。
begin
dbms_job.run(9);
end;
執行過後發現表中有資料,那就是job沒什麼問題,但是系統中可能有些地方沒設定正確。
5、然後我又通過以下語句修改job下次執行時間,改完當前時間後的幾分鐘,幾分鐘後,發現還是沒有執行成功。
begin
dbms_job.next_date(9, to_date('2019-07-09 16:30:00','yyyy-mm-dd hh24:mi:ss'));
end;
6、最後在網上查詢原因,發現了乙個哥們的部落格,真的是救命。
select value from v$parameter where name like '%job_queue_processes%'
該語句可以檢視你的當前使用者下執行job的臨界值,當我檢視之後發現為0,也就是說我的job乙個都不能執行。
於是我果斷用以下語句將臨界值修改為100。
alter system set job_queue_processes =100;
然後發現我的job已經開始自動執行了,應該是這個臨界值預設就是0,而後需要自己修改,真的是個大坑,浪費了我一下午的時間。
最近又出現了乙個大坑 就是 我手動執行job的時候 會出現以下的錯誤
而後,我在sys下面建立job,在sys下面執行job,發現執行是成功的,這時候發現可能是許可權的問題,於是又給我當前使用者賦予執行job的許可權。
grant create job to orace_user1;
grant manage scheduler to orace_user1;
grant execute on dbms_job to user;
最主要的是下面的那個 給使用者賦予當前使用者可以執行儲存過程的許可權。
oracle建立定時任務
oracle建立三個定時任務,每個小時呼叫一次report hour,每天呼叫一次report day,每個月呼叫一次report month declare job1 number job2 number job3 number begin sys.dbms job.submit job job1...
Oracle建立定時任務
開啟命令列操作一下步驟 1 sqlplus as sysdba 2 conn 使用者名稱 密碼 3 variable job num 4 begin dbms job.submit job num,testjob trunc sysdate 23 24,trunc sysdate 23 24 end...
Oracle建立定時任務
開啟命令列操作一下步驟 1 sqlplus as sysdba 2 conn 使用者名稱 密碼 3 variable job num 4 begin dbms job.submit job num,testjob trunc sysdate 23 24,trunc sysdate 23 24 end...