前言~
? ? ? ? ? 我們知道plsql工具的使用非常強(qiáng)大,使用它來(lái)創(chuàng)建存儲(chǔ)過(guò)程以及定時(shí)任務(wù)都非常簡(jiǎn)單望拖。上篇文章講解到使用plsql創(chuàng)建存儲(chǔ)過(guò)程及調(diào)試蔓倍,那么今天文章內(nèi)容就是講解使用plsql創(chuàng)建定時(shí)任務(wù)胰舆,以及讓定時(shí)任務(wù)執(zhí)行昨登。
在使用plsql創(chuàng)建定時(shí)任務(wù)之前,我們有必要先了解一下oracle中的job定時(shí)任務(wù)的一些內(nèi)容冀瓦。
1)伴奥、?查詢oracle中的job
oracle查看哪個(gè)存儲(chǔ)過(guò)程對(duì)應(yīng)的哪個(gè)定時(shí)器
select * from dba_jobs t where upper(t.what) like %參數(shù)%;
oracle查詢所有定時(shí)器
select * from dba_jobs;
oracle查看正在運(yùn)行的job
select * from dba_jobs_running;
下面講解一下job的相關(guān)字段內(nèi)容,以便能更加了解
字段(列)? ? ? ? ? ? 類型????????????????????????描述
????job? ? ? ? ? ? ? ? ? number????????????作業(yè)標(biāo)識(shí)符翼闽。無(wú)論是進(jìn)出口還是重復(fù)執(zhí)行都不能改變它拾徙。
log_user????????????varchar2(30)????提交作業(yè)時(shí)登錄的用戶
priv_user???????????varchar2(30)????默認(rèn)權(quán)限應(yīng)用于此作業(yè)的用戶
schema_user? ??varchar2(30)? ??對(duì)任務(wù)作語(yǔ)法分析的用戶模式
last_date? ? ? ? ? ? ? ?date? ? ? ? ? ? ?最后一次成功運(yùn)行任務(wù)的時(shí)間
last_sec? ? ? ? ? ? ?varchar2(8)? ? ?這是最后一次成功執(zhí)行的開始。如hh24:mm:ss格式的? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? last_date日期的小時(shí)感局,分鐘和秒
this_date? ? ? ? ? ? ??date? ? ? ? ? ? ? 正在運(yùn)行任務(wù)的開始時(shí)間尼啡,如果沒有運(yùn)行任務(wù)則為null
this_sec? ? ? ? ? ? ?varchar2(8)? ? ?如hh24:mm:ss格式的this_date日期的小時(shí),分鐘和秒
next_date? ? ?????????date? ? ? ? ? ? ??下一次定時(shí)運(yùn)行任務(wù)的時(shí)間询微,如果為“4000/1/1”,不代表是? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?job沒有運(yùn)行崖瞭,還需查看broken的值
broken? ? ? ? ? ? ? ?varchar2(1)? ? ??如果Y,則不嘗試運(yùn)行此作業(yè)撑毛。
interval? ? ? ? ? ? ? varchar2(200)? 在執(zhí)行開始時(shí)評(píng)估的日期函數(shù)將成為下一個(gè)日期书聚。
failuses? ? ? ? ? ? ?number? ? ? ? ? ? ?這項(xiàng)工作自上次成功以來(lái)曾經(jīng)歷過(guò)多少次失敗?
what? ? ? ? ? ? ? ? ? varchar2(2000) 執(zhí)行任務(wù)的PL/SQL塊(存儲(chǔ)過(guò)程名稱)????
其中最重要的字段就是job 這個(gè)值就是我們操作job的id號(hào)雌续,what 操作存儲(chǔ)過(guò)程的名稱斩个,next_date 執(zhí)行的時(shí)間,interval執(zhí)行間隔
2)西雀、執(zhí)行間隔interval 運(yùn)行頻率
描述????????????????????????????? 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
每個(gè)月第一天的午夜12點(diǎn)??????? TRUNC(LAST_DAY(SYSDATE ) + 1)
每個(gè)季度最后一天的晚上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)
每秒鐘執(zhí)行1次
Interval => sysdate + 1/(24 * 60 * 60)
如果改成sysdate + 10/(24 * 60 * 60)就是10秒鐘執(zhí)行1次
每分鐘執(zhí)行1次
Interval => TRUNC(sysdate,'mi') + 1/ (24*60)
如果改成TRUNC(sysdate,'mi') + 10/ (24*60) 就是每10分鐘執(zhí)行次
每天定時(shí)執(zhí)行
例如:每天的凌晨1點(diǎn)執(zhí)行
Interval => TRUNC(sysdate) + 1 +1/ (24)
每周定時(shí)執(zhí)行
例如:每周一凌晨1點(diǎn)執(zhí)行
Interval => TRUNC(next_day(sysdate,'星期一'))+1/24
每月定時(shí)執(zhí)行
例如:每月1日凌晨1點(diǎn)執(zhí)行
Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24
每季度定時(shí)執(zhí)行
例如每季度的第一天凌晨1點(diǎn)執(zhí)行
Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24
每半年定時(shí)執(zhí)行
例如:每年7月1日和1月1日凌晨1點(diǎn)
Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24
每年定時(shí)執(zhí)行
例如:每年1月1日凌晨1點(diǎn)執(zhí)行
Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24
說(shuō)明一下上面的某些參數(shù):
? ? 1萨驶、查找電腦系統(tǒng)當(dāng)前時(shí)間(sysdate)
sysdate-1:昨天? ? sysdate:今天? ? ? sysdae+1:明天
注意:*允許日期減日期歉摧,但是不允許日期加日期
? ? 2艇肴、計(jì)算兩個(gè)日期之間的月份數(shù):months_between(大的時(shí)間,小的時(shí)間)
? ? 3叁温、增加月份(add_months)
? ? 格式為:add_months(原來(lái)時(shí)間再悼,需要增加的月份數(shù))
? select add_months(sysdate,53) from dual;? -->在當(dāng)前系統(tǒng)時(shí)間的基礎(chǔ)上增加53個(gè)月。
? ? 4膝但、得到當(dāng)月的最后一天(last_day(date))
? ? ? 格式為:select last_day(system);-->現(xiàn)在系統(tǒng)時(shí)間為8月冲九,那么返回的是為8月31日。
? ? 5跟束、達(dá)到滿足條件的下一次的日期(next_day(要查詢的日期莺奸,‘日期數(shù)’))
? ? ? 格式為:select next_day(system,'星期五') from dual;--->得到的是下一周的星期五的天數(shù)? ? ?
? ? ?6、直接抹去字符串中寫的日期冀宴,不包含該日期灭贷,不存在四舍五入的現(xiàn)象trunc(要四舍五入的時(shí)間,‘year/month/dd/或者不填’)
? ? 格式:select trunc (sysdate,'year') from dual ->現(xiàn)在系統(tǒng)時(shí)間是2017年略贮,返回的是:2017-01-01 00:00:00甚疟,
? ? ? ? ? select trunc(sysdate,'dd') from dual->現(xiàn)在系統(tǒng)時(shí)間是2017年8月2號(hào),返回的是:2017-08-02 00:00:00
3)逃延、創(chuàng)建job
基本語(yǔ)法:
declare
? ? variable job number;
begin
? ? sys.dbms_job.submit(job => :job,
? ? what => '存儲(chǔ)過(guò)程名字;',(what保存的是存儲(chǔ)過(guò)程名字览妖,記住后面還有一個(gè)“ ; ”)
? ? next_date =>?下一次執(zhí)行定時(shí)任務(wù)的時(shí)間,系統(tǒng)會(huì)自動(dòng)計(jì)算,
? ? interval => 'sysdate+1/86400');--每天86400秒鐘揽祥,即一秒鐘運(yùn)行prc_name過(guò)程一次
? ? commit;
end;
使用dbms_job.submit方法過(guò)程讽膏,這個(gè)過(guò)程有五個(gè)參數(shù):job、what拄丰、next_date府树、interval與no_parse。
dbms_job.submit(
job? ? ? ? ? ? ? ? ? out? ? ? ? ? ? ? ? ? ? binary_ineger,
what? ? ? ? ? ? ? ? in? ? ? ? ? ? ? ? ? ? ?varchar2,
next_date? ? ? ? in? ? ? ? ? ? ? ? ? ? ?date,
interval? ? ? ? ? ? in? ? ? ? ? ? ? ? ? ? ?varchar2,
no_parse? ? ? ? in? ? ? ? ? ? ? ? ? ? ? booean:=FALSE)
job參數(shù)是輸出參數(shù)愈案,由submit()過(guò)程返回的binary_ineger挺尾,這個(gè)值用來(lái)唯一標(biāo)識(shí)一個(gè)工作。一般定義一個(gè)變量接收站绪,可以去user_jobs視圖查詢job值遭铺。
what參數(shù)是將被執(zhí)行的PL/SQL代碼塊,存儲(chǔ)過(guò)程名稱等。
next_date參數(shù)指識(shí)何時(shí)將運(yùn)行這個(gè)工作魂挂。
interval參數(shù)何時(shí)這個(gè)工作將被重執(zhí)行甫题。
no_parse參數(shù)指示此工作在提交時(shí)或執(zhí)行時(shí)是否應(yīng)進(jìn)行語(yǔ)法分析——true,默認(rèn)值false涂召。指示此PL/SQL代碼在它第一次執(zhí)行時(shí)應(yīng)進(jìn)行語(yǔ)法分析坠非,而FALSE指示本PL/SQL代碼應(yīng)立即進(jìn)行語(yǔ)法分析。
4)果正、其他job相關(guān)的存儲(chǔ)過(guò)程
? ? ? ? 在dbms_job這個(gè)package中還有其他的過(guò)程:broken炎码、change、interval秋泳、isubmit潦闲、next_date、remove迫皱、run歉闰、submit、user_export卓起、what和敬;
1、broken()過(guò)程更新一個(gè)已提交的工作的狀態(tài)戏阅,典型地是用來(lái)把一個(gè)已破工作標(biāo)記為未破工作昼弟。這個(gè)過(guò)程有三個(gè)參數(shù):job 、broken與next_date饲握。
procedure broken (
job? ? ? ? ? ? ? ? ? ? ? ? ?in? ? ? ? ? ? ? ? ? binary_integer,
broken? ? ? ? ? ? ? ? ? ?in? ? ? ? ? ? ? ? ? boolean,
next_date? ? ? ? ? ? ? in? ? ? ? ? ? ? ? ? date := sysdate
)
job參數(shù)是工作號(hào)私杜,它在問題中唯一標(biāo)識(shí)工作。
broken參數(shù)指示此工作是否將標(biāo)記為破——true說(shuō)明此工作將標(biāo)記為破救欧,而false說(shuō)明此工作將標(biāo)記為未破衰粹。
next_date參數(shù)指示在什么時(shí)候此工作將再次運(yùn)行。此參數(shù)缺省值為當(dāng)前日期和時(shí)間笆怠。
job如果由于某種原因未能成功執(zhí)行铝耻,oracle將重試16次后,還未能成功執(zhí)行蹬刷,將被標(biāo)記為broken瓢捉,重新啟動(dòng)狀態(tài)為broken的job,有如下兩種方式;
a办成、利用dbms_job.run()立即執(zhí)行該job
begin
dbms_job.run(:job) --該job為submit過(guò)程提交時(shí)返回的job number或是去dba_jobs去查找對(duì)應(yīng)job的編號(hào)
end;
b泡态、利用dbms_job.broken()重新將broken標(biāo)記為false
begin
dbms_job.broken (:job, false, next_date)
end;
2、change()過(guò)程用來(lái)改變指定job的設(shè)置迂卢。
這個(gè)過(guò)程有四個(gè)參數(shù):job某弦、what 桐汤、next_date、interval靶壮。
procedure change (
job? ? ? ? ? ? ? ? ? ? ? ? ?in? ? ? ? ? ? ? ? ? binary_integer,
what? ? ? ? ? ? ? ? ? ? ? in? ? ? ? ? ? ? ? ? varchar2,
next_date? ? ? ? ? ? ?in? ? ? ? ? ? ? ? ? date,
interval? ? ? ? ? ? ? ? ?in? ? ? ? ? ? ? ? ? varchar2
)
此job參數(shù)是一個(gè)整數(shù)值怔毛,它唯一標(biāo)識(shí)此工作。
what參數(shù)是由此job運(yùn)行的一塊PL/SQL代碼塊腾降。
next_date參數(shù)指示何時(shí)此job將被執(zhí)行拣度。
interval參數(shù)指示一個(gè)job重執(zhí)行的頻度。
3螃壤、interval()過(guò)程用來(lái)顯式地設(shè)置重復(fù)執(zhí)行一個(gè)job之間的時(shí)間間隔數(shù)抗果。
這個(gè)過(guò)程有兩個(gè)參數(shù):job、interval映穗。
procedure interval(
job? ? ? ? ? ? ? ? ? ? ? ? ?in? ? ? ? ? ? ? ? ? binary_integer,?
interval? ? ? ? ? ? ? ? ? in? ? ? ? ? ? ? ? ?varchar2
)
job參數(shù)標(biāo)識(shí)一個(gè)特定的工作窖张。
interval參數(shù)指示一個(gè)工作重執(zhí)行的頻度。
4蚁滋、isubmit()過(guò)程用來(lái)用特定的job號(hào)提交一個(gè)job。
這個(gè)過(guò)程有五個(gè)參數(shù):job赘淮、what辕录、next_date、interval梢卸、no_parse走诞。
procedure isubmit (
job? ? ? ? ? ? ? ? ? ? ? ? ?in? ? ? ? ? ? ? ? ? binary_integer,
what? ? ? ? ? ? ? ? ? ? ? in? ? ? ? ? ? ? ? ? varchar2,
next_date? ? ? ? ? ? ?in? ? ? ? ? ? ? ? ? date,
interval? ? ? ? ? ? ? ? ?in? ? ? ? ? ? ? ? ? varchar2,
no_parse? ? ? ? ? ? ?in? ? ? ? ? ? ? ? ? ?booean := FALSE
)
這個(gè)過(guò)程與submit()過(guò)程的唯一區(qū)別在于此job參數(shù)作為IN型參數(shù)傳遞且包括一個(gè)由開發(fā)者提供的job號(hào)。如果提供的job號(hào)已被使用蛤高,將產(chǎn)生一個(gè)錯(cuò)誤蚣旱。
5、next_date()過(guò)程用來(lái)顯式地設(shè)定一個(gè)job的執(zhí)行時(shí)間戴陡。這個(gè)過(guò)程接收兩個(gè)參數(shù):job塞绿、next_date。
procedure next_date(
job? ? ? ? ? ? ? ? ? ? ? ? ?in? ? ? ? ? ? ? ? ? binary_integer,
next_date? ? ? ? ? ? ?in? ? ? ? ? ? ? ? ? date
)
job標(biāo)識(shí)一個(gè)已存在的工作恤批。
next_date參數(shù)指示了此job應(yīng)被執(zhí)行的日期异吻、時(shí)間。
6喜庞、remove()過(guò)程來(lái)刪除一個(gè)已計(jì)劃運(yùn)行的job诀浪。這個(gè)過(guò)程接收一個(gè)參數(shù):
procedure remove(job IN binary_ineger);
job參數(shù)唯一地標(biāo)識(shí)一個(gè)工作這個(gè)參數(shù)的值是由為此工作調(diào)用submit()過(guò)程返回的job參數(shù)的值,已正在運(yùn)行的job不能刪除延都。
7雷猪、run()過(guò)程用來(lái)立即執(zhí)行一個(gè)指定的job。這個(gè)過(guò)程只接收一個(gè)參數(shù):
procedure run(job IN binary_ineger)
job參數(shù)標(biāo)識(shí)將被立即執(zhí)行的工作晰房。
8求摇、使用submit()過(guò)程酵颁,job被正常地計(jì)劃。上面以講述
9月帝、user_export()過(guò)程返回一個(gè)命令躏惋,此命令用來(lái)安排一個(gè)存在的job以便此job能重新提交。此程序有兩個(gè)參數(shù):job嚷辅、my_call簿姨。
procedure user_export(
job? ? ? ? ? ? ? ? ? ? ? ? ?in? ? ? ? ? ? ? ? ? binary_integer,
my_call? ? ? ? ? ? ? ? ?in out? ? ? ? ? ? varchar2
)
job參數(shù)標(biāo)識(shí)一個(gè)安排了的工作。
my_call參數(shù)包含在它的當(dāng)前狀態(tài)重新提交此job所需要的正文簸搞。
10扁位、what()過(guò)程應(yīng)許在job執(zhí)行時(shí)重新設(shè)置此正在運(yùn)行的命令。這個(gè)過(guò)程接收兩個(gè)參數(shù):job趁俊、what域仇。
procedure what (
job? ? ? ? ? ? ? ? ? ? ? ? ?in? ? ? ? ? ? ? ? ? binary_integer,
what? ? ? ? ? ? ? ? ? ? ? in? ? ? ? ? ? ? ? ? varchar2
)
job參數(shù)標(biāo)識(shí)一個(gè)存在的工作。
what參數(shù)指示將被執(zhí)行的新的PL/SQL代碼寺擂。實(shí)現(xiàn)的功能:每隔一分鐘自動(dòng)向getSysDate表中插入當(dāng)前的系統(tǒng)時(shí)間暇务。
5)、job的相關(guān)方法
1怔软、停止job
execute dbms_job.broken(27, true, sysdate);---該27表示oracle系統(tǒng)中job定時(shí)任務(wù)的job字段
begin
dbms_job.broken(27, true, sysdate);---該27表示oracle系統(tǒng)中job定時(shí)任務(wù)的job字段
commit;
end垦细;
/
2、運(yùn)行job
execute dbms_job.run(27);---該27表示oracle系統(tǒng)中job定時(shí)任務(wù)的job字段
begin
dbms_job.run(27);
end挡逼;
begin
? ? dbms_job.broken(423, false,sysdate);---該423表示的是oracle系統(tǒng)中job定時(shí)任務(wù)的job字段
? ? commit;
end;
/
3括改、刪除job
begin
dbms_job.remove(27);? ? ---該27表示的是oracle系統(tǒng)中job定時(shí)任務(wù)的job字段
end;
6)家坎、關(guān)于設(shè)置job任務(wù)數(shù)量和控制并發(fā)
初始化相關(guān)參數(shù)job_queue_processes
alter system set job_queue_processes = 39 scope = spfile;//最大值不能超過(guò)1000;
job_queue_interval = 10; //調(diào)度作業(yè)刷新頻率秒為單位
job_queue_process 表示oracle能夠并發(fā)的job的數(shù)量嘱能,sqlplus中可以通過(guò)語(yǔ)句
show parameter job_queue_process; 來(lái)查看oracle中job_queue_process的值。
select * from v$parameter;
select name, description from v$bgprocess;
當(dāng)job_queue_process值為0時(shí)表示全部停止oracle的job虱疏,可以通過(guò)語(yǔ)句
alter system set job_queue_processes = 10;
來(lái)調(diào)整啟動(dòng)oracle的job惹骂。
如果將job_queue_processes 的值設(shè)置為1的話,那就是串行運(yùn)行订框,即快速切換執(zhí)行一個(gè)job任務(wù)析苫。
7)、使用plsql創(chuàng)建定時(shí)任務(wù)步驟
(1)穿扳、登錄plsql后衩侥,在對(duì)象框中找到“DBMS_Jobs”,點(diǎn)擊右鍵 ,找到新建矛物,如圖所示:
(2)茫死、就進(jìn)入到新建job界面,如圖所示:
8)履羞、job不運(yùn)行的大概原因
(1)峦萎、上面講解了job的參數(shù):與job相關(guān)的參數(shù)一個(gè)是job_queue_processes屡久,這個(gè)是運(yùn)行job時(shí)候所起的進(jìn)程數(shù),當(dāng)然系統(tǒng)里面job大于這個(gè)數(shù)值后爱榔,就會(huì)有排隊(duì)等候的被环,最小值是0,表示不運(yùn)行job详幽,最大值是1000筛欢,在OS上對(duì)應(yīng)的進(jìn)程時(shí)SNPn,9i以后OS上管理job的進(jìn)程叫CJQn唇聘“婀茫可以使用下面這個(gè)SQL確定目前有幾個(gè)SNP/CJQ在運(yùn)行。
select * from v$bgprocess迟郎,這個(gè)paddr不為空的snp/cjq進(jìn)程就是目前空閑的進(jìn)程剥险,有的表示正在工作的進(jìn)程。
另外一個(gè)是job_queue_interval宪肖,范圍在1--3600之間表制,單位是秒,這個(gè)是喚醒JOB的process匈庭,因?yàn)槊看蝧np運(yùn)行完他就休息了锈遥,需要定期喚醒他书幕,這個(gè)值不能太小,太小會(huì)影響數(shù)據(jù)庫(kù)的性能规阀。
先確定上面這兩個(gè)參數(shù)設(shè)置是否正確魔熏,特別是第一個(gè)參數(shù)衷咽,設(shè)置為0了,所有job就不會(huì)自動(dòng)運(yùn)行了蒜绽。
(2)镶骗、使用下面的SQL查看job的的broken,last_date和next_date躲雅,last_date是指最近一次job運(yùn)行成功的結(jié)束時(shí)間鼎姊,next_date是根據(jù)設(shè)置的頻率計(jì)算的下次執(zhí)行時(shí)間,根據(jù)這個(gè)信息就可以判斷job上次是否正常相赁,還可以判斷下次的時(shí)間對(duì)不對(duì)相寇,SQL如下:
select * from dba_jobs;
有時(shí)候我們發(fā)現(xiàn)他的next_date是4000年1月1日,說(shuō)明job要不就是在running钮科,要不就是狀態(tài)是break(broken=Y)唤衫,如果發(fā)現(xiàn)job的broken值為Y,找用戶了解一下绵脯,確定該job是否可以broken佳励,如果不能broken休里,那就把broken值修改成N,修改再使用上面的SQL查看就發(fā)現(xiàn)它的last_date已經(jīng)變了赃承,job即可正常運(yùn)行妙黍,修改broken狀態(tài)的SQL如下:
begin
DBMS_JOB.BROKEN(, FALSE);
end;
(3)、使用下面的SQL查詢是否job還在running
select * from dba_jobs_running;
如果發(fā)現(xiàn)job已經(jīng)Run了很久了還沒有結(jié)束瞧剖,就要查原因了拭嫁。一般的job running時(shí)會(huì)鎖定相關(guān)的相關(guān)的資源,可以查看一下v$access和v$locked_object這兩個(gè)view筒繁。如果發(fā)現(xiàn)其他進(jìn)程鎖定了與job相關(guān)的object噩凹,包括package/function/procedure/table等資源,那么就要把其他進(jìn)程刪除毡咏,有必要的話驮宴,把job的進(jìn)程也刪除,再重新執(zhí)行看看結(jié)果呕缭。
(4)堵泽、如果上面都正常,但是job還不run恢总,怎么辦迎罗?那我們要考慮把job進(jìn)程重啟一次,防止是SNP進(jìn)程死了造成job不跑片仿,指令如下:
alter system set job_queue_processes = 0; --關(guān)閉job進(jìn)程纹安,等待5--10秒鐘
alter system set job_quene_processes = 5; --恢復(fù)原來(lái)的值
(5)、Oracle的BUG:Oracle9i里面有一個(gè)BUG砂豌,當(dāng)計(jì)數(shù)器到497天時(shí)厢岂,剛好達(dá)到它的最大值,再計(jì)數(shù)就會(huì)變成-1阳距,繼續(xù)計(jì)數(shù)就變成0了塔粒,然后計(jì)數(shù)器將不再跑了。如果碰到這種情況就得重啟數(shù)據(jù)庫(kù)筐摘,但是其他的Oracle7345和Oracle8i的數(shù)據(jù)庫(kù)沒有發(fā)現(xiàn)這個(gè)問題卒茬。
(6)、數(shù)據(jù)庫(kù)上的檢查基本上就這多咖熟,如果job運(yùn)行還有問題圃酵,那需要看一下是否是程序本身的問題,比如處理的資料量大球恤,或者網(wǎng)絡(luò)速度慢等造成運(yùn)行時(shí)過(guò)長(zhǎng)辜昵,那就需要具體情況具體分析了。我們可以通過(guò)下面的SQL手工執(zhí)行一下job看看:
begin
dbms_job.run(_ID)
end;
如果發(fā)現(xiàn)job執(zhí)行不正常咽斧,就要結(jié)合程序具體分析一下堪置。
最后真心的感謝大家能觀看我寫的文章躬存,如存在什么不足的地方,請(qǐng)下方給我留言舀锨!