1.引言
創(chuàng)新互聯(lián)主要從事成都網(wǎng)站制作、成都做網(wǎng)站、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)洛江,十多年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):028-86922220
定制定時執(zhí)行的任務(wù)有兩種形式,系統(tǒng)級別和數(shù)據(jù)庫級別,
從操作系統(tǒng)級別來講,
windows系統(tǒng)我們可以使用任務(wù)計劃來實現(xiàn),
對于winXP系統(tǒng),設(shè)置步驟如下,開始---設(shè)置---控制面板---任務(wù)計劃,然后添加任務(wù)計劃,按向?qū)瓿膳渲眉纯?
對于win7系統(tǒng),設(shè)置步驟如下,點(diǎn)擊開始,然后在 搜索程序和文件 框中輸入 [任務(wù)計劃],然后點(diǎn)擊出來的任務(wù)計劃程序,創(chuàng)建一個基本任務(wù)即可;
linux系統(tǒng)我們可以使用crontab命令來是實現(xiàn),
關(guān)于crontab命令的使用可以見之前的博客
從數(shù)據(jù)庫級別來講,我們可以采用數(shù)據(jù)庫的job來實現(xiàn);
本節(jié)主要介紹通過oracle數(shù)據(jù)庫的job來定制一個簡單的定時執(zhí)行任務(wù)。本節(jié)會采用oracle定制一個定時向一個表中插入語句。
這里聊一下我做這個oracle定時任務(wù)的緣由:
項目中要在固定的時間,把一個數(shù)據(jù)庫中某些表的數(shù)據(jù)同步到另外一個數(shù)據(jù)庫,顯然這些工作我不能每次都自己去做,
那么,我要怎么來做呢?這個時候oracle的定時執(zhí)行任務(wù)JOB無疑是我的最佳選擇。我把同步的腳本放在一個存儲過程中,
然后在固定的時間去執(zhí)行這個存儲過程就OK了。
注意:以下所有的操作都是在sytem用戶下執(zhí)行。采用PL/SQL做的客戶端登陸。
用job
oracle定時器調(diào)用存儲過程
1.創(chuàng)建一個表,為了能清楚看到定時器的運(yùn)行情況我們創(chuàng)建一個帶有日期字段的表
Sql代碼
create table job_table(run_time date);
create table job_table(run_time date);
2.創(chuàng)建存儲過程
Sql代碼
create or replace procedure job_proc is
begin
insert into job_table (run_time) values (sysdate);
end;
create or replace procedure job_proc is
begin
insert into job_table (run_time) values (sysdate);
end;
3.創(chuàng)建job,并且指定為一分鐘執(zhí)行一次
Sql代碼
declare
job number;
begin
dbms_job.submit(job, 'job_proc;', sysdate, 'TRUNC(sysdate,''mi'') + 1 / (24*60)');
end/
commit;
declare
job number;
begin
dbms_job.submit(job, 'job_proc;', sysdate, 'TRUNC(sysdate,''mi'') + 1 / (24*60)');
end/
commit;
4.創(chuàng)建之后自動處于運(yùn)行狀態(tài),我們查詢job表,看看我們創(chuàng)建的job
Sql代碼
select job,broken,what,interval,t.* from user_jobs t;
select job,broken,what,interval,t.* from user_jobs t;
job broken what interval ...
81 N job_proc; TRUNC(sysdate,'mi') + 1 / (24*60) ...
參數(shù)介紹
job job的唯一標(biāo)識,自動生成的
broken 是否處于運(yùn)行狀態(tài),N;運(yùn)行;Y:停止
what 存儲過程名稱
interval 定義的執(zhí)行時間
補(bǔ)充:
描述 INTERVAL參數(shù)值
每天午夜12點(diǎn) ''TRUNC(SYSDATE + 1)''
每天早上8點(diǎn)30分 ''TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)''
每星期二中午12點(diǎn) ''NEXT_DAY(TRUNC(SYSDATE ), ''''TUESDAY'''' ) + 12/24''
每個月第一天的午夜12點(diǎn) ''TRUNC(LAST_DAY(SYSDATE ) + 1)''
每個季度最后一天的晚上11點(diǎn) ''TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), ''Q'' ) -1/24''
每星期六和日早上6點(diǎn)10分 ''TRUNC(LEAST(NEXT_DAY(SYSDATE, ''''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)''
創(chuàng)建scheduler,PL/SQL Developer里可以直接創(chuàng)建,也可以寫SQL創(chuàng)建,類似以下語法:
begin
sys.dbms_scheduler.create_schedule(schedule_name = 'FRQ_CATALOG.TT',
start_date = to_date('18-10-2011 00:00:00', 'dd-mm-yyyy hh24:mi:ss'),
repeat_interval = 'Freq=Daily;Interval=0',
end_date = to_date('31-10-2011 00:00:00', 'dd-mm-yyyy hh24:mi:ss'),
comments = '');
end;
如果懂了希望點(diǎn)一下采納
通過plsql查看tables、views等文件夾,找到定時器對應(yīng)的DBMS_Jobs文件夾。
在文件夾或者在已有的定時器上右鍵 new... 創(chuàng)建一個新的job(定時器)
輸入紅色選中的必輸參數(shù)。What里面是一些存儲過程,可以是一個或者多個。多個之間用分好;隔開,可以數(shù)據(jù)一下注釋說明,格式“/*存過說明*/。點(diǎn)擊應(yīng)用即可保存。點(diǎn)擊View SQL可以查看job對應(yīng)的sql腳本。
如果想查看一些腳本,處理通過打開文件夾的方式,也可以使用更方便的sql語句進(jìn)行查看。
SELECT * FROM dba_jobs;
注意,如果next_date是4000-1-1表示這個腳本已經(jīng)是停止?fàn)顟B(tài)。
如果想查詢某個存儲過程對應(yīng)的哪個job可以通過dba_jobs表中what字段根據(jù)條件查詢查看job.
dba_jobs中的job字段對應(yīng)的值就和DBMS_Jobs中對應(yīng)的數(shù)字是一致的,可以對信息進(jìn)行修改更新。