:2006.12.30 18:26
: Oracle
http://snowfeeling.itpub.net/post/17847/246457
---------------------------------------------------------------
client/serverĻУҪӦġںܶҪdeferoracleŶӻƾʵdeferʽĹġ
1messageķչ
1ʹļϵͳΪqueueĴ洢ȱǶ¼롣
2DBΪqueueĴ洢ȱDBûкϢĽӿڣȻ塣
3oracleʹϢϵͳϢϳdbС
ûmessage:
- Ա뽨process֮workflow
- Ҫ쳣ϵͳпܵĴ
- ҪӵĴʧܵĽ̡
message,:
- ں漯ɣٿ
- ϵͳ¼쳣Լ
- OLTPν
2Message
MessageǵСλMessageûϢobject typeʽͿϢ˳ִдڡȼȣ
һtransactionԴʹmessage
ӦóûʹEnqueue̸ûϢͿϢ
MessageԱӦãߴmessageӦãDeQueue̶ȡ
ENQUEUEDEQUEUEӦǴϵͳ
3Message QUEUE.
һMessage QUEUEMESSAGEһMESSAGEֻһQUEUE
ڴQUEUEʱ֣ӦóֶͨMESSAGE QUEUE
DBMS_AQADMṩALTER,ALTER,START,STOPDROP QUEUEIJ
DBûQUEUEơ
4QUEUE TABLE
QUEUE TABLEDBͨTABLEԶĿQUEUE TABLEʹDBMS_AQADMеĹQUEUE TABLE.
5ORACLE /AQ(Advanced Queue)ŵ
ɿݿϳһܺͼ˲
6ORACLE/AQص
ORACLE AQṩ
MESSAGE ORDER
MESSAGE PRIORITY
Correlation identifier
Time Constraints
Object Type as Message
Reply queue
exception queue
Nontransactional and transactional request
Mulitiple recipient
Message Grouping
7DBMS_AQ
ֻ̣ENQUEUEDEQUEUE
ENQUEUEQUEUEмMESSAGE
DEQUEUEQUEUEеõMESSAGE
ʼֻSYSʹDBMS_AQûAQ_USER_ROLE roleʹ֮
8DBMS_AQ.ENQUEUE
DBMS_AQ.ENQUEUE(
QUEUE_NAME IN VARCHAR2,
ENQUEUE_OPTIONS IN enqueue_option_t,
MESSAGE_PROPERTIES IN message_option_t,
PAYLOAD IN <object_type|RAW>,
MSGID OUT RAW)
ENQUEUE_OPTIONSMESSAGE_PROPERTIESԤRECORD͡
PAYLOADOBJECT TYPERAW.OBJECT900Ϊ˴RAW͵PAYLOADAQὨһLOBеQUEUE TABLEPAYLOAD32Kֽڡ
QUEUE_NAMEQUEUE_NAMESCHEMAɣֻQUEUE_NAMEPAYLOADEXCEPTION QUEUEֻϵͳſԴ쳣С
TYPE ENQUEUE_OPTIONS_T IS RECORD
VISIBILITY BINARY_INTEGER default ON_COMMIT,
RELATIVE_MSGID RAW(16) DEFAULT NULL,
SEQUENCE_DEVIATION BINARY_INTEGER default NULL
);
VISIBILITY:ָķʽ
ON_COMMITENQUEUEǵǰһ֣COMMITʱŽ
IMMEDIATEENQUEUEһ֣Լһ
RELATIVE_MSGID:صMESSAGE IDֻSEQUENCE_DEVIATION=BEFOREʱЧSEQUENCE_DEVIATIONûãͱԡ
SEQUENCE_DEVICATION:ָmessageλ
BEFORE:RELATIVE_MSGIDǰ
TOP:messageǰ
NULL:ȱʡ
TYPE MESSAGE_PROPERTIES_T IS RECORD
(PRIORITY BINARY_INTEGER DEFAULTE 1,
DELAY BINARY_INTEGER DEFAULT NO_DELAY,
EXPIRATION BINARY_INTEGER deafult NEVER,
CORRELATION VARCHAR2(128) default NULL,
ATTEMPTS BINARY_INTEGER,
RECIPTIENT_LIST AQ$_RECIPIENT_LIST_T,
EXCEPTION_QUEUE VARCHAR2(51) default NULL,
ENQUEUE_TIME DATE,
STATE BINARY_INTEGER);
priority:ȼԽСԽߣֵֵdequeue˳
delay:ƣʱdequeuedelayڼ䣬messageWAITTING״̬ʱ֮READY״̬нMESSAGEȷģҪʱ
expiration:ƣʱmessageڣdelay֮=NEVERڡֵʾREADY״̬ʱ䡣ʱ仹ûDEQUEUEƶ쳣УEXPIRED״̬
correlation:ָصID
attempts:ͼdequeueĴENQUEUEʱá
recipient_list:ֻûʹòЧʾûϢ
expiration_queue쳣е֡MESSAGEƶУQUEUEʱõԴߵEXPIRE TIMEеMESSAGEEXPORED״̬ȱʡQUEUE TABLE쳣Сָ쳣вڣͷŵȱʡУALERTļм¼ʹȱʡУDEQUEUEͻ᷵NULL
enqueue_time:messageеʱ䣬ϵͳ
state:4״̬WAITTING, READY, PROCESSED, EXPIRED
RECIPIENT_LIST_T:
TYPE RECIPIENT_LIST_T IS TABLE OF SYS.AQ$AGENT INDEX BY BINARY_INTEGER;
TYPE SYS.AQ$AGENT IS OBJECT
(NAME VARCHAR2(30),
ADDRESS VARCHAR2(30),
PROTOCOL NUMBER)
MSGID
ENQUEUEɺһΨһȫIDIJ
9DBMS_AQ.DEQUEUE
DBMS_AQ.DEQUEUE(
queue_name IN VARCHAR2
dequeue_options IN dequeue_options_t,
message_properties OUT message_properties_t,
payload OUT <typ_name>,
msgid OUT RAW)
queueȡmessageȡdequeue_optionsconsumer_namemsgidȲָmsgidֻREADY״̬messagedequeue
TYPE DEQUEUE_OPTIONS_T IS RECORD
(consumer_name VARCHAR2(3) DEFAULT NULL,
dequeue_mode BINARY_INTEGER DEFAULT REMOVE,
navigation BINARY_INTEGER DEFAULT NEXT_MESSAGE,
visibility BINARY_INTEGER DEFAULT ON_COMMIT,
wait BINARY_INTEGER DEFAULT FOREVER,
msgid BINARY_INTEGER DEFAULT NULL,
cirrelation VARCHAR2(128) DEFAULT NULL);
dequeue_mode:
BROWSE:ֻȡMESSAGELOCK൱SELECT
LOCKED:READ/WRITE LOCKֱ൱SELECT FOR UPDATE.
REMOVE:ȡUPDATE/DELETEϢ
navigation:
ʲôλÿʼѯ
NEXT_MESSAGE:¸ʼȱʡֵ
NEXT_TRANSACTIONһtransactionĵһmessageʼ
FIRST_MESSAGE:QUEUEһʼ
visibility:
Ƿڵǰtransaction.BROWSE״̬Ըֵ
ON_COMMIT:ڵǰtransactionȱʡֵ
IMMEDIATE:ԼΪһTRANSACTION
WAIT:
ûзMESSAGEʱҪȴá
FOREVERȵзij֣ȱʡֵ
NO_WAITȴ
numberȴ
MESSAGE_PROPS_REC
(PRIORITY BINARY_INTEGER DEFAULT 1,
DELAY BINARY_INTEGER DEFAULT NO_DELAY,
EXPIRATION BINARY_INTEGER DEFAULT NEVER,
CORRELATION VARCHAR2(128) DEFAULT NULL,
ATTEMPTS BINARY_INTEGER,
RECIPIENT_LIST aq$_recipicent_list_t,
EXCEPTION_QUEUE VARCHAR2(51) DEFAULT NULL,
ENQUEUE_TIME DATE,
STATE BINARY_INTEGER);
ڴMESSAGEϢ
10AQ_TM_PROCESSES
MESSAGEҪDELAYEXPIREȣҪTIMER̡INITļAQ_TM_PROCESSES=1һʱMESSAGEĿǰֻΪ1>1ͻûʱ=0߲ʱ
11DBMS_AQADMʹȨ
ð¹̣
CREATE_QTABLE
DROP_QTABLE
CREATE_Q
DROP_Q
ALTER_Q
START_Q
STOP_Q
START_TIMEZ_MANAGER
STOP_TIMEZ_MANAGER
ADD_SUBSCRIBER
REMOVE_SUBSCRIBER
QUEUE_SUBSCRIBERS
ĶϢϵͳ⡣ԱСþйȨˡʼֻSYSAQ_ADMINISTRATOR_ROLE
12GRANT_TYPE_ACCSES procedure
ʼSYSȨûAQ OBJECT TYPEȨޡû봦߶еIJִ֮Ȩ²CREATE_QUEUE_TABLECREATE_QUEUEADD_SUBSCROBERREMOVE_SUBSCRIBER
13CREATE_QUEUE_TABLE
DBMS_AQADM.CRETAE_QUEUE_TABLE
(queue_table IN Varchar,
queue_payload_type IN varchar2,
storage_clause IN varchar2 default null,
sort_list IN varchar2 default null
multiple_consumers IN BOOLEAN default NULL,
message_grouping IN binary_integer default NONE,
comment IN varchar2 default null,
auto_commit IN boolean TRUE);
̴һԤ͵ĶСҪϢʱָ֮sort_listзŵҪcolumnԣöŷָdequeueʱá
ͬʱὨصviewtable
ȱʡexception queue tableaq$_<б>_e
ѯõֻviewaq$<б>
ʱõindexaq$_<б>_T
ΪDEQUEUEڶ߶ʹõINDEXIndes Originized Table(IOT)aq$_<б>_i
message_grouping:
DBMS_AQ.NONE
DBMS_AQ.TRANSACTIONALϢһ
14DROP_QUEUE_TABLE
DBMS_AQ.DROP_QUEUE_TABLE
QUEUE_NAME
force IN BOOLEAN default FALSE,
auto_commit IN BOOLEAN default TRUE)
force
=FALSE: ϢڶУʧ
=TRUEϢֹ
15CREATE_QUEUE
CREATE_QUEUE
(queue_name,
queue_table IN VARCHAR2,
queue_type ɣ BINARY_INTEGER default NORMAL_QUEUE,
max_retries IN NUMBER default 0,
retyr_delay NUMBER default
retention_time IN NUMBER 0,
dependency_tracking INBOOLEAN default FALSE,
comment INVARCHAR2 DEFAULTΣգ̣̣
auto_commit IN BOOLEAN DEFAULTԣңգţ
һһнҪstart_queue enableȱʡdisableġ
queue_type= (NORMAL_QUEUE/ EXCEPTION_QUEUE)
max_retries=removeʽdequeueĴִdequeue֮Ӧ൱rollbackʱ1max_retries֮Ϣƶ쳣С
retry_delay=Եļ
rention_time=Ӷɾqueue tableбֵʱ䡣
dependency_tracking =TRUE/FALSE,汾ʹá
16DROP_QUEUE
DBMS_AQADM.DROP_QUEUE
(QUEUE_NAME IN VARCHAR2,
AUTO_COMMIT IN BOOLEAN DEFAULT TRUE);
ɾһQUEUEɾ֮ǰSTOP_QUEUEenqueuedequeue
17ALTER_QUEUE
DBMS_AQADM.ALTER_QUEUE
(QUEUE_NAME IN VARCHAR2,
MAX_RETRIES IN NUMBER DEFAULT NULL,
RETRY_DELAY IN NUMBER DEFAULT NULL,
RETRNTION_TIME IN NUMBER DEFAULT NULL,
AUTO_COMMIT IN BOOLEAN DEFAULT TRUE);
زΪnullʾԭֵ
18START_QUEUE
DBMS_AQADM.START_QUEUE
queue_name IN varchar2,
enqueue INboolean default TRUE,
dequeue IN boolean default TRUE);
enqueuedequeueCREATE_QUEUE֮START_QUEUE֮
쳣ֻDEQUEUEʹ߶Ϊtrue
19STOP_QUEUE
DBMS_AQADM.STOP_QUEUE
(queue_name INvarchar2,
enqueue IN boolean default TRUE,
dequeue IN boolean default TRUE,
wait IN boolean default TRUE);
waitָǷȴڴɡڵȴڼ䲻enqueuedequeue.
20START_TIME_MANAGER / STOP_TIME_MANAGER
̨init.oraеIJaq_tm_process=1START_TIME_MANAGER ֮ãء
STOP_TIME_MANAGER ִֹͣУDzжϺ̨̡
21ADD_SUBSCRIBER
DBMS_AQADM.ADD_SUBSCRIBER
(QUEUE_NAME IN VARCHAR2,
SUBSCRIBER IN SYS.AQ$_AGENT);
Ӷеsubscriberֻڶ²ãòãǰtransactionͬʱcommitҪȨſʹ̡
TYPE SYS.AQ$_AGENT IS OBJECT
(NAME VARCHAR2(30),
ADDRESS VARCHAR2(30),
PROTOCOL NUMBER);
22REMOVE_SUBSCRIBER
DBMS_QADM.REMOVE_SUBSCRIBER
(queue_nam IN varchar2,
subscriber IN SYS.AQ$_AGENT);
ɾsubscriberòãǰtransactionͬʱcommitsubscriberɾ
23QUEUE_SUBSCRIBER
QUEUE_SUBSCRIBER(queue_name IN varchar2) return AQ$_SUBSCRIBER;
AQ$_AGENTPL/SQL TABLEԿQUEUESUBSCRIBER
24ֵ
DBA/USER_QUEUE_TABLES
DBA/USER_QUEUES
AQ$<б>VIEW)






