亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Oracle存儲(chǔ)過(guò)程中任務(wù)和管道的應(yīng)用

瀏覽:63日期:2023-11-13 14:20:55
1. 前言 在ORACLE數(shù)據(jù)庫(kù)實(shí)際應(yīng)用過(guò)程中,經(jīng)常把業(yè)務(wù)處理邏輯的放在存儲(chǔ)過(guò)程,客戶端通過(guò)ADO進(jìn)行調(diào)用。有些業(yè)務(wù)邏輯處理量大并且復(fù)雜,使客戶端調(diào)用存儲(chǔ)過(guò)程后,長(zhǎng)時(shí)間沒(méi)有反應(yīng),也不知存儲(chǔ)過(guò)程運(yùn)行狀態(tài),本文講述如何在ORACLE通過(guò)任務(wù)和管道的應(yīng)用,異步調(diào)用存儲(chǔ)過(guò)程的方法。 2. 基本原理 1.使用DBMS_JOB包將主處理存儲(chǔ)過(guò)程作為任務(wù)提交到任務(wù)隊(duì)列中; 2.主處理存儲(chǔ)過(guò)程在運(yùn)行過(guò)程中通過(guò)DBMS_PIPE包將處理情況放在管道中; 3.監(jiān)控存儲(chǔ)過(guò)程讀取管道,從而了解處理情況; 4.本文沒(méi)有描述雙向通信的方式,監(jiān)控存儲(chǔ)過(guò)程可以通過(guò)管道發(fā)送信息給主處理存儲(chǔ)過(guò)程。 3. 具體實(shí)現(xiàn)測(cè)試 建立測(cè)試環(huán)境 3.1. 對(duì)數(shù)據(jù)庫(kù)的ini進(jìn)行相關(guān)修改,使系統(tǒng)的任務(wù)隊(duì)列功能打開(kāi) 對(duì)于Oracle9I,只需修設(shè)定數(shù)據(jù)庫(kù)的INI內(nèi)的'JOB_QUEUE_PROCESSES=非0值',如 'JOB_QUEUE_PROCESSES=10',對(duì)于ORACLE8I除設(shè)定實(shí)例ini文件中的'JOB_QUEUE_PROCESSES=非0值'外,還需設(shè)定'job_queue_interval=1'。 3.2. 設(shè)用用戶權(quán)限 由于使用ORACLE中特定的程序包,所以要注重要明文給于用戶系統(tǒng)權(quán)限。對(duì)當(dāng)前用戶(測(cè)試用戶),賦于以下權(quán)力: EXECUTE DBMS_PIPEEXECUTE DBMS_LOCKEXECUTE DBMS_JOB3.3. 建立模擬大業(yè)務(wù)處理存儲(chǔ)過(guò)程 本存儲(chǔ)過(guò)程通過(guò)循環(huán)30次,調(diào)用DBMS_LOCK.SLEEP(1)(體眠1秒)和寫(xiě)管道模擬大的處理過(guò)程。 具體代碼如下: CREATE OR REPLACE PROCEDURE maXPro ASn integer;status NUMBER;BEGINFOR N IN 1..30 LOOPDBMS_PIPE.PURGE('maxpro'); --清除原管道信息DBMS_PIPE.PACK_MESSAGE(N); --把信息放入緩沖區(qū)status:=DBMS_PIPE.SEND_MESSAGE('maxpro');DBMS_LOCK.SLEEP(1);END LOOP;DBMS_PIPE.PURGE('maxpro'); --清除原管道信息DBMS_PIPE.PACK_MESSAGE(999999); --把信息放入緩沖區(qū),用999999 表示過(guò)程完成status:=DBMS_PIPE.SEND_MESSAGE('maxpro');END maxpro;3.4. 建立讀取管道動(dòng)態(tài)了解處理狀態(tài)的存儲(chǔ)過(guò)程 以下代碼是對(duì)于maxpro存儲(chǔ)過(guò)程的狀態(tài)進(jìn)行讀取的過(guò)程,主要使用讀取管道的方法,注重: status:= DBMS_PIPE.RECEIVE_MESSAGE('maxpro',0);中的'0'參數(shù)是很要害的,說(shuō)明接受等待時(shí)間為0秒,表示,調(diào)用時(shí)假如沒(méi)有信息不等待直接返回。 具體代碼如下: CREATE OR REPLACE PROCEDURE readmaxpro ASn integer;status integer;begin--接受等待時(shí)間為1秒,可以為0,立即調(diào)用或 DBMS_PIPE.RECEIVE_MESSAGE('mypipe') 等待100天status:= DBMS_PIPE.RECEIVE_MESSAGE('maxpro',0);--status為0為成功可以UNPACK_MESSAGE,1為超時(shí)沒(méi)有數(shù)據(jù), 2為信息太大,3為內(nèi)部錯(cuò)誤IF status <> 0 THENDBMS_OUTPUT.PUT_LINE('管道中現(xiàn)在沒(méi)有信息返回');return;END IF;DBMS_PIPE.UNPACK_MESSAGE(n);DBMS_OUTPUT.PUT_LINE('maxpro 的當(dāng)前進(jìn)行狀態(tài)為' n);end;3.5. -起動(dòng)模擬大業(yè)務(wù)處理存儲(chǔ)過(guò)程為后臺(tái)進(jìn)程的存儲(chǔ)過(guò)程(BEGINMAXPRO) 通過(guò)DBMS_JOB.SUBMIT(JOB,'maxpro;',sysdate,NULL,FALSE);使'maxpro'為一個(gè)任務(wù),在當(dāng)前時(shí)間(sysdate)后執(zhí)行,當(dāng)然假如把sysdate改一具體時(shí)間,那就在具體時(shí)間執(zhí)行。 具休代碼如下: CREATE OR REPLACE PROCEDURE beginmaxpro ASJOB BINARY_INTEGER;BEGINDBMS_JOB.SUBMIT(JOB,'maxpro;',sysdate,NULL,FALSE);DBMS_OUTPUT.PUT_LINE('隊(duì)列號(hào)碼JOB=' JOB);COMMIT;end;4. 代碼執(zhí)行 4.1. 執(zhí)行過(guò)程 在CMD行輸入 sqlplus 根據(jù)提示登錄設(shè)定DBMS_OUTPUT可見(jiàn)SQL> set serveroutput ON以下是執(zhí)行過(guò)程和相應(yīng)的返回信息SQL> call beginmaxpro();隊(duì)列號(hào)碼JOB=21調(diào)用完成。SQL> call readmaxpro();maxpro 的當(dāng)前進(jìn)行狀態(tài)為14調(diào)用完成。SQL> call readmaxpro();maxpro 的當(dāng)前進(jìn)行狀態(tài)為16調(diào)用完成。SQL> call readmaxpro();maxpro 的當(dāng)前進(jìn)行狀態(tài)為23調(diào)用完成。SQL> call readmaxpro();maxpro 的當(dāng)前進(jìn)行狀態(tài)為999999調(diào)用完成。SQL> call readmaxpro();管道中現(xiàn)在沒(méi)有信息返回調(diào)用完成。SQL>4.2. 執(zhí)行分析 beginmaxpro(),將主處理存儲(chǔ)過(guò)程放入隊(duì)列的過(guò)程,執(zhí)行后存儲(chǔ)程序馬上返回,maxpro存儲(chǔ)過(guò)程放在任務(wù)隊(duì)列中,并設(shè)定為在當(dāng)前系統(tǒng)時(shí)間執(zhí)行(馬上執(zhí)行)。 maxpro為主處理存儲(chǔ)過(guò)程,開(kāi)始執(zhí)行模擬大業(yè)務(wù)處理,處理過(guò)程中將處理進(jìn)度信息寫(xiě)入管道。 readmaxpro();為檢查狀態(tài)存儲(chǔ)過(guò)程,首先讀取信息,假如信息不存在,說(shuō)明管道內(nèi)沒(méi)有信息可讀而退出;假如存在信息則讀出信息。 本例子可以進(jìn)行改進(jìn),輸出不通過(guò)DBMS_OUTPUT.PUT_LINE而是用返回值,那么就可以在前端用ADO調(diào)用,發(fā)布任務(wù),任務(wù)過(guò)程中從客戶端讀取進(jìn)度。代碼如下: CREATE OR REPLACE PROCEDURE readmaxpro(p out intergr) ASn integer;status integer;beginstatus:= DBMS_PIPE.RECEIVE_MESSAGE('maxpro',0);IF status <> 0 THENP:=-1;return;END IF;DBMS_PIPE.UNPACK_MESSAGE(p);end;
主站蜘蛛池模板: 欧美一级日本一级韩国一级 | 成人禁在线观看网站 | 成人午夜天 | 国产三级a三级三级午夜 | 国产精品1区 2区 3区 | 国产91第一页 | 欧美成人在线影院 | 波多野结衣一区二区在线 | 中文字幕波多野不卡一区 | 久久精品亚瑟全部免费观看 | 国产精品久久久久久久久 | 亚洲一区免费在线 | 久草在线最新 | 国产伦精品一区二区三区无广告 | 毛片美国基地 | 久久免费国产精品一区二区 | 538prom精品视频在放免费 | 国产成人精品综合在线观看 | 国产精品人伦久久 | 老师张开腿让我捅 | 99久久免费看国产精品 | 亚洲精品不卡视频 | 在线免费精品视频 | 日韩a级| 亚州一级毛片在线 | 99福利资源久久福利资源 | 日韩欧美一级 | 久草在线视频资源 | 欧美精品高清在线观看 | 国产日韩精品一区在线不卡 | 欧美一区在线观看视频 | 视频一区二区三区自拍 | 国产成人啪精品视频免费软件 | 中文字幕一区二区在线播放 | 色视频www在线播放国产人成 | 成人性一级视频在线观看 | 波多野结衣在线免费观看视频 | 亚洲国产成人va在线观看网址 | 日韩专区亚洲国产精品 | 成人18免费 | 久久久在线 |