ORACLE調(diào)度之基于事件的調(diào)度(二)

二仗岖、知識補充

  1、隊列:一種數(shù)據(jù)結(jié)構(gòu)览妖,就像一根管道一樣轧拄,進程一個個的塞進去,然后一個個的出來黄痪,講究的是先進先出紧帕。

  2盔然、高級隊列:

  a桅打、高級隊列管理是Oracle數(shù)據(jù)庫的一個特性,它提供消息隊列管理功能愈案。這是一個非惩ξ玻可靠、安全和可伸縮的消息管理系統(tǒng)站绪,因為它使用與其他基于Oracle技術(shù)的應(yīng)用程序相同的數(shù)據(jù)庫特性遭铺。

b、高級隊列管理的一個很大優(yōu)點是它可以通過PL/SQL、Java或C來訪問魂挂,這樣你就可以把來自一個Java servlet的消息入隊列和使PL/SQL存儲過程中的相同消息出隊列甫题。

c、高級隊列管理的另一個優(yōu)點是你可以利用這一軟件通過Oracle Net Services (SQL*Net)涂召、HTTP(S)和SMTP坠非,在遠(yuǎn)程節(jié)點之間傳播消息。高級隊列甚至可以通過消息網(wǎng)關(guān)與非Oracle的消息管理系

統(tǒng)(如IBM MQSeries)相集成果正。

d炎码、Oracle高級隊列管理提供了單消費者隊列和多消費者隊列。單消費者隊列只面向單一的接收者秋泳。多消費者隊列可以被多個接收者使用潦闲。當(dāng)把消息放入多消費者隊列時,應(yīng)用程序的程序員必須顯式地在消息屬性中指定這些接收者迫皱,或者建立決定每條消息的接收者的基于規(guī)則的訂閱過程歉闰。


三、基于事件的調(diào)度

創(chuàng)建測試用表

conn hr/hr

create table event_job_test(id number,createdatae date);

alter table event_job_test add constraint pk_event_job_test primary key(id);

create sequence seq_event_job_test;

創(chuàng)建一個類型:

create or replace type t_event_queueasobject(object_owner varchar2(50),event_name varchar2(50));

創(chuàng)建一個隊列表卓起,該隊列包含的字段就是我們剛才創(chuàng)建的類型t_event_queue所包含的屬性新娜。

conn /as sysdba

grant execute on dbms_aqadm to hr;

conn hr/hr

begin

dbms_aqadm.create_queue_table(

queue_table=>'event_queue_tab',

queue_payload_type=>'t_event_queue',

multiple_consumers=>true);

end;/

創(chuàng)建一個隊列,并將該隊列與前面創(chuàng)建的隊列表關(guān)聯(lián)

begin

dbms_aqadm.create_queue(

queue_name=>'event_queue',

queue_table=>'event_queue_tab');

end;/

啟動隊列

begin

dbms_aqadm.start_queue(queue_name=>'event_queue');

end;/

?創(chuàng)建一個基于事件的任務(wù)

conn /as sysdba

BEGIN

sys.dbms_scheduler.create_job(

job_name =>'"HR"."EVENT_BASE_JOB"',

job_type =>'PLSQL_BLOCK',

job_action =>'begin? insert into hr.event_job_test values(seq_event_job_test.nextval,sysdate);

? commit;

end;',event_condition =>'tab.user_data.object_owner=''HR'' andtab.user_data.event_name=''give_me_an_event''',queue_spec =>'HR.EVENT_QUEUE',

start_date => systimestamp at time zone'+8:00',

job_class =>'DEFAULT_JOB_CLASS',

auto_drop => FALSE,

enabled => TRUE);

END;

向隊列中插入消息

沒插入之前既绩,查詢表概龄,發(fā)現(xiàn)沒數(shù)據(jù)。

conn hr/hrselect*fromevent_job_test;

向隊列里插入消息

conn /as sysdba

grant execute on dbms_aq to hr;

conn hr/hr

declare

? ? l_enqueue_options dbms_aq.enqueue_options_t;

? ? l_message_properties dbms_aq.message_properties_t;

? ? l_message_handle raw(16);

? ? l_queue_msg t_event_queue;

begin

? ? l_queue_msg := t_event_queue('HR','give_me_an_event');

? ? dbms_aq.enqueue(

? ? ? queue_name=>'event_queue',

? ? ? enqueue_options=>l_enqueue_options,

? ? ? message_properties=>l_message_properties,

? ? ? payload=>l_queue_msg,

? ? ? msgid=>l_message_handle);

? ? commit;

end;select*fromevent_job_test;

刪除作業(yè):

begin

? dbms_scheduler.drop_job(job_name =>'"HR"."EVENT_BASE_JOB"', force =>true);

end;

創(chuàng)建基于事件的調(diào)度加載數(shù)據(jù)

創(chuàng)建測試用表

conn scott/tiger

create table t asselect*fromempwhere1=2;

vi /u01/load.ctl

load data

infile '/u01/data.txt'badfile '/u01/bad.emp'discardfile '/u01/discadr.emp'truncate

into table t

fields terminated by ','trailing nullcols

(EMPNO,

ENAME,

JOB,

MGR,

HIREDATE,

SAL,

COMM,

DEPTNO)

vi /u01/load.sh

#!/bin/bash

export ORACLE_BASE=/u01/app/oracle

export ORACLE_HOME=$ORACLE_BASE/product/11.2/db_1

export ORACLE_SID=orcl

$ORACLE_HOME/bin/sqlldr scott/tiger control=/u01/load.ctl log=/u01/load.log

保存退出

chmod +x /u01/load.sh

將emp中的數(shù)據(jù)轉(zhuǎn)儲到/u01/data.txt中:

set trims on

spool /u01/data.txtselect

? ? EMPNO||','||? ? ENAME||','||? ? JOB||','||? ? MGR||','||? ? HIREDATE||','||? ? SAL||','||? ? COMM||','||? ? DEPTNO from emp;

spool off

創(chuàng)建一個類型:

sqlplus scott/tiger

create or replace type t_event_queue asobject(

? object_owner? ? varchar2(10),

? object_name? ? varchar2(20),

? event_type? ? ? varchar2(20),

? event_timestamp number(2)

);/

創(chuàng)建一個隊列表饲握,該隊列包含的字段就是我們剛才創(chuàng)建的類型t_event_queue所包含的屬性私杜。

conn /as sysdba

grant execute on dbms_aqadm to scott;

conn scott/tiger

begin

dbms_aqadm.create_queue_table(

queue_table=>'event_queue_tab',

queue_payload_type=>'t_event_queue',

multiple_consumers=>true);

end;/

創(chuàng)建一個隊列,并將該隊列與前面創(chuàng)建的隊列表關(guān)聯(lián)

begin

dbms_aqadm.create_queue(

queue_name=>'event_queue',

queue_table=>'event_queue_tab');

end;/

啟動隊列

begin

dbms_aqadm.start_queue(queue_name=>'event_queue');

end;/

創(chuàng)建一個基于事件的任務(wù)

conn /as sysdba

BEGIN

? sys.dbms_scheduler.create_job(job_name? ? ? ? =>'"SYS"."PERFORM_DATA_LOAD"', --屬主必須是sys

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? job_type? ? ? ? =>'EXECUTABLE',

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? job_action? ? ? =>'/u01/load.sh',

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? event_condition =>'tab.user_data.object_owner =? ''SCOTT''and tab.user_data.object_name =''DATA.TXT''?

and tab.user_data.event_type =''FILE_ARRIVAL''and tab.user_data.event_timestamp <9',--創(chuàng)建一個作業(yè)救欧,如果成批裝入的數(shù)據(jù)文件在上午 9:00 之前到達文件系統(tǒng)衰粹,則運行此作業(yè)queue_spec? ? ? =>'SCOTT.EVENT_QUEUE',

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? start_date? ? ? => systimestamp at time zone

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? '+8:00',

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? job_class? ? ? =>'DEFAULT_JOB_CLASS',

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? auto_drop? ? ? => FALSE,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? enabled? ? ? ? => TRUE);

END;/

向隊列中插入消息

conn scott/tigerselect*fromt;

向隊列里插入消息

conn /as sysdba

grant execute on dbms_aq to scott;

conn scott/tiger

declare

? l_enqueue_options? ? dbms_aq.enqueue_options_t;

? l_message_properties dbms_aq.message_properties_t;

? l_message_handle? ? raw(16);

? l_queue_msg? ? ? ? ? t_event_queue;

begin

? l_queue_msg := t_event_queue('SCOTT','DATA.TXT','FILE_ARRIVAL',8);

? dbms_aq.enqueue(queue_name? ? ? ? =>'event_queue',

? ? ? ? ? ? ? ? ? enqueue_options? ? => l_enqueue_options,

? ? ? ? ? ? ? ? ? message_properties => l_message_properties,

? ? ? ? ? ? ? ? ? payload? ? ? ? ? ? => l_queue_msg,

? ? ? ? ? ? ? ? ? msgid? ? ? ? ? ? ? => l_message_handle);

? commit;

end;/select*fromt;

刪除作業(yè):

conn /as sysdba

begin

? dbms_scheduler.drop_job(job_name =>'"SYS"."PERFORM_DATA_LOAD"', force =>true);

end;/

總結(jié)一下oracle db里用job調(diào)度shell的注意點:

1、shell腳本里開頭要加#!/bin/bash等指定使用的shell類型

2笆怠、所有相關(guān)環(huán)境變量都得在shell里明確指定

3铝耻、如果要寫入文件必需使用絕對路徑

4、使用sys用戶建立job

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蹬刷,一起剝皮案震驚了整個濱河市瓢捉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌办成,老刑警劉巖泡态,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異迂卢,居然都是意外死亡某弦,警方通過查閱死者的電腦和手機桐汤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來靶壮,“玉大人怔毛,你說我怎么就攤上這事√诮担” “怎么了馆截?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蜂莉。 經(jīng)常有香客問我蜡娶,道長,這世上最難降的妖魔是什么映穗? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任窖张,我火速辦了婚禮,結(jié)果婚禮上蚁滋,老公的妹妹穿的比我還像新娘宿接。我一直安慰自己,他們只是感情好辕录,可當(dāng)我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布睦霎。 她就那樣靜靜地躺著,像睡著了一般走诞。 火紅的嫁衣襯著肌膚如雪副女。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天蚣旱,我揣著相機與錄音碑幅,去河邊找鬼。 笑死塞绿,一個胖子當(dāng)著我的面吹牛沟涨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播异吻,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼裹赴,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了诀浪?” 一聲冷哼從身側(cè)響起棋返,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎笋妥,沒想到半個月后懊昨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡春宣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年酵颁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片月帝。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡躏惋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出嚷辅,到底是詐尸還是另有隱情簿姨,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布簸搞,位于F島的核電站扁位,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏趁俊。R本人自食惡果不足惜域仇,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望寺擂。 院中可真熱鬧暇务,春花似錦、人聲如沸怔软。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽挡逼。三九已至括改,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間家坎,已是汗流浹背叹谁。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留乘盖,地道東北人焰檩。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像订框,于是被迫代替她去往敵國和親析苫。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一穿扳、源題QUESTION 1The instance abnormally terminates because ...
    貓貓_tomluo閱讀 1,598評論 0 2
  • 一衩侥、調(diào)度的概述 這里我看到一篇對調(diào)度的概述覺得描述的比我好,但僅限于概述部分矛物,其他部分我覺得我講的比他好茫死,于是發(fā)生...
    hanson_zju閱讀 817評論 0 1
  • 一、源題QUESTION 74View the Exhibit. You want to create a tab...
    貓貓_tomluo閱讀 1,512評論 0 1
  • 1.簡介 數(shù)據(jù)存儲有哪些方式履羞?電子表格峦萎,紙質(zhì)文件屡久,數(shù)據(jù)庫。 那么究竟什么是關(guān)系型數(shù)據(jù)庫爱榔? 目前對數(shù)據(jù)庫的分類主要是...
    喬震閱讀 1,716評論 0 2
  • 1.對于朋友比自己好被环。例如住大床主臥,自己睡沙發(fā)等~ 2.對于朋友行最大的方便详幽,例如時間給朋友留出空間筛欢。 3.情分...
    小峰峯閱讀 131評論 0 0