DBMS_AQ
DBMS_AQ 패키지의 기본 개념과 패키지 내의 프러시저와 함수를 사용하는 방법을 설명합니다.
개요
DBMS_AQ 패키지는 Tibero의 Advanced Queuing 기능과 관련한 프러시저와 함수를 제공합니다. Tibero의 Advanced Queuing은 Tibero 데이터베이스와 통합되어 있는 메시지 Queuing 기능입니다. 메시지는 데이터 베이스 테이블에 영속적으로 저장되며, 필요에 따라 SQL을 통해 직접 queue 테이블의 내용을 조회하는 것도 가능합니다.
queue는 단일 소비자 queue 또는 복수 소비자 queue일 수 있습니다. 단일 소비자 queue에 메시지를 enqueue 하면 이 메시지는 오직 하나의 소비자만 dequeue할 수 있으며, 이 dequeue된 메시지를 또 다른 소비자가 dequeue하는 것은 불가능합니다. 복수 소비자 queue일 경우는 디폴트 구독자들 또는 별도로 지정한 수신 자들을 대상으로 enqueue를 수행할 수 있으며, 이때 각 소비자는 자신을 대상으로 enqueue된 메시지를 dequeue할 수 있다.
tbCLI 클라이언트는 자신이 관심있어 하는 queue에 enqueue가 수행될 때 그 이벤트를 알림으로 받을 수 있도록 자신을 등록할 수 있습니다. 이때 콜백함수를 명시해 놓으면 알림을 받을 때마다 해당 콜백함수를 수행 하는 것이 가능합니다.
참고
메시지의 payload 타입은 현재 RAW 타입만 가능하고, tbCLI에서 알림 등록 및 콜백함수 수행에 대 해서는 "Tibero tbCLI 안내서"를 참고합니다.
다음은 DBMS_AQ 패키지 내에 정의된 상수입니다.
IMMEDIATE CONSTANT PLS_INTEGER := 0;
ON_COMMIT CONSTANT PLS_INTEGER := 1;
BROWSE CONSTANT BINARY_INTEGER := 1;
LOCKED CONSTANT BINARY_INTEGER := 2;
REMOVE CONSTANT BINARY_INTEGER := 3;
REMOVE_NODATA CONSTANT BINARY_INTEGER := 4;
FIRST_MESSAGE CONSTANT BINARY_INTEGER := 1;
NEXT_MESSAGE CONSTANT BINARY_INTEGER := 3;
FOREVER CONSTANT BINARY_INTEGER := -1;
NO_WAIT CONSTANT BINARY_INTEGER := 0;
NAMESPACE_AQ CONSTANT BINARY_INTEGER := 1;타입
본 절에서는 DBMS_AQ 패키지에서 제공하는 별도 정의된 타입들을 알파벳 순으로 설명합니다.
AQ$_AGENT
메시지의 생산자 또는 소비자를 명시할 때 사용하는 타입입니다.
AQ$_AGENT 타입의 세부 내용은 다음과 같습니다.
프로토타입
필드
name
생산자 또는 소비자의 이름을 명시
객체의 이름을 부여할 때와 동일한 규칙이 적용
address
현재 버전에서는 사용되지 않음
protocol
현재 버전에서는 사용되지 않음
AQ$_RECIPIENT_LIST_T
메시지를 수신할 agent의 목록을 명시합니다. 복수 소비자 queue에 대해서만 이 타입을 사용할 수 있습니다.
AQ$_RECIPIENT_LIST_T 타입의 세부 내용은 다음과 같습니다.
프로토타입
DEQUEUE_OPTIONS_T
dequeue할 때 적용할 수 있는 옵션들을 명시하는 타입입니다.
DEQUEUE_OPTIONS_T 타입의 세부 내용은 다음과 같습니다.
프로토타입
필드
consumer_name
소비자의 이름
이 소비자에게 보내진 메시지만 dequeue가 됨
단일 소비자 queue에 대해서는 이 값이 NULL이어야 함
dequeue_mode
dequeue를 수행할 때 수행되는 잠금 방식을 결정함
설정 가능한 값은 다음과 같음
BROWSE : 아무런 잠금도 획득하지 않고 메시지 내용을 읽음. 단순 select와 동일
LOCKED : dequeue한 메시지를 읽으면서 잠금을 획득. 이 잠금은 트 랜잭션이 유지되는 동안 유효. select for update와 동일하다고 할 수 있음
REMOVE : 메시지를 읽고 지움 (기본값)
REMOVE_N : 메시지를 읽지 않고 지
navigation
가져올 메시지의 위치를 결정
설정 가능한 값은 다음과 같음
NEXT_MESSAGE : 마지막 위치 다음에 있는 메시지를 가져옴 (기본값)
FIRST_MESSAGE : 검색 조건에 맞는 첫 번째 메시지를 가져옴. 이 옵션을 사용하면 메시지의 위치가 초기화됨
visibility
메시지를 dequeue하는 동작을 현재 트랜잭션에 같이 포함시킬지 결정
dequeue_mode가 BROWSE일 경우 이 값은 무시됨
설정 가능한 값은 다음과 같음
ON_COMMIT : dequeue는 현재 트랜잭션에 포함됨
IMMEDIATE : dequeue는 현재 트랜잭션에 참여하지 않고 자율 트랜잭션 으로 수행되며, dequeue를 완료하면 자율 트랜잭션은 커밋됨
wait
검색 조건에 해당하는 메시지가 없을 때 기다릴 시간을 명시함
설정 가능한 값은 다음과 같음
FOREVER : 영원히 기다림(기본값)
NO_WAIT : 기다리지 않고 바로 리턴
숫자 : 기다릴 시간을 초 단위로 명시
msgid
dequeue할 메시지 식별자를 명시
correlation
dequeue할 메시지의 연관 식별자를 명시함
퍼센트 기호(%) 또는 언더바(_)와 같은 패턴 대조에 사용되는 문자를 넣을 수 있음
deq_condition
메시지 속성 또는 메시지 데이터 속성에 대한 조건식을 지정
이것은 SQL문의 WHERE 절에 오는 것과 같은 형식의 참/거짓을 가지는 표현식
메시지 속성은 queue 테이블에 존재하는 priority, corrid 또는 기타 다른 컬럼을 포함
ENQUEUE_OPTIONS_T
enqueue할 때 취할 수 있는 옵션들을 명시하는 타입입니다.
ENQUEUE_OPTIONS_T 타입의 세부 내용은 다음과 같습니다.
프로토타입
필드
visibility
메시지를 enqueue하는 동작을 현재 트랜잭션에 같이 포함시킬지 결정
설정 가능한 값은 다음과 같음
ON_COMMIT : enqueue는 현재 트랜잭션에 포함 (기본값)
IMMEDIATE : enqueue는 현재 트랜잭션에 참여하지 않고 자율 트랜잭션 으로 수행되며, enqueue를 완료하면 자율 트랜잭션은 커밋
MESSAGE_PROPERTIES_T
메시지 각각에 대한 여러 속성을 명시하는데 사용하는 타입입니다. enqueue할 때는 이 속성을 채워서 enqueue하며, dequeue할 때는 채웠던 속성이 반환됩니다.
MESSAGE_PROPERTIES_T 타입의 세부 내용은 다음과 같습니다.
프로토타입
필드
priority
메시지의 우선 순위를 명시
숫자가 작을수록 우선 순위가 높은 것
음수를 포함해 어떤 숫자도 가능
correlation
메시지를 enqueue할 때 생산자가 명시할 수 있는 연관 식별자
recipient_list
메시지를 전달할 수신자를 직접 명시할 때 사용하는 AQ$_AGENT agent에 대한 인덱스 테이블
복수 소비자 queue에 대해서만 이 값을 명시할 수 있고, 이 값을 명시하지 않 으면 디폴트 구독자들이 수신자가 됨
이 파라미터는 dequeue할 때 소비 자에게 반환되지 않음
enqueue_time
메시지가 enqueue된 시점을 반환
이 값은 시스템이 결정하며 enqueue 할 때 사용자가 명시할 수 없음
MESSAGE_PROPERTIES_ARRAY_T
이 타입은 dbms_aq.enqueue_array나 dbms_aq.dequeue_array를 호출할 때 여러 메시지에 대한 속성을 함께 명시하기 위해 사용합니다. 즉, payload_array에 명시된 payload 개수만큼message_properties_array_t varray에 속성들이 명시되어야 합니다.
MESSAGE_PROPERTIES_ARRAY_T 타입의 세부 내용은 다음과 같습니다.
프로토타입
MSGID_ARRAY_T
이 타입은 dbms_aq.enqueue_array나 dbms_aq.dequeue_array를 호출할 때 enqueue되거나 dequeue된메시지 식별자들을 반환하기 위한 용도로 사용합니다.
MSGID_ARRAY_T 타입의 세부 내용은 다음과 같습니다.
프로토타입
PAYLOAD_ARRAY_T
이 타입은 dbms_aq.enqueue_array나 dbms_aq.dequeue_array를 호출할 때 payload 여러 개를 함께 명 시하기 위해 사용합니다. 현재 payload는 RAW 타입만 지원됩니다.
PAYLOAD_ARRAY_T 타입의 세부 내용은 다음과 같습니다.
프로토타입
프러시저와 함수
본 절에서는 DBMS_AQ 패키지에서 제공하는 프러시저와 함수를 알파벳 순으로 설명합니다. DBMS_AQ 패키지의 프로시저와 함수 예제 수행을 위해서는 queue_table과 queue를 사전에 생성해야 하며 자세한 내용은 “6. DBMS_AQADAM”을 참고합니다.
DEQUEUE
대상 queue로부터 메시지를 하나 dequeue합니다. 어떤 메시지를 dequeue할 것인가는 dequeue_options의 consumer_name, msgid, correlation 또는 deq_condition에 무엇을 명시했느냐에 따라 결정됩니다. 각각에 대한 설명은 “5.2.3. DEQUEUE_OPTIONS_T”를 참고합니다.
dequeue되는 메시지의 순서는 queue 테이블을 생성할 때 명시하는 정렬 순서에 의해 결정됩니다. dequeue_op tions에 msgid 또는 correlation을 명시하면 이 순서를 무시할 수 있습니다. enqueue 및 dequeue도 일반 데이 터베이스 동작과 마찬가지로 일관성 읽기 규칙이 적용됩니다. 예를 들어 BROWSE가 시작되고 나서 enqueue 된 메시지가 보이지 않을 수 있습니다.
navigation 파라미터의 기본값은 NEXT_MESSAGE입니다. 이것은 반복적인 dequeue를 수행할 때 맨 처음 dequeue를 수행했을 때의 스냅샷을 기준으로 메시지들이 순차적으로 반환됨을 의미합니다. 즉, 첫 번째 dequeue를 수행한 이후에 enqueue된 메시지는 현재 dequeue하고 있는 메시지들이 다 소비된 이후에만 소비가 가능합니다. 일반적으로는 이렇게 동작해도 문제가 없지만 우선 순위와 같은 이유로 dequeue할 때 항상 queue의 첫 번째 메시지를 dequeue해야 할 경우는 FIRST_MESSAGE 옵션을 사용해야만 합니다. 예를 들어 기존에 enqueue된 메시지를 처리하는 중에 더 높은 우선 순위의 메시지가 enqueue되었을 경우 이를 먼저 처리하기 위해서 이 옵션이 필요합니다.
DEQUEUE 프러시저의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
queue_name
메시지를 dequeue할 queue의 이름을 명시
dequeue_options
dequeue할 모든 메시지에 동일하게 적용되는 옵션을 명시
자세한 내용은 “5.2.3. DEQUEUE_OPTIONS_T”를 참고
message_properties
반환되는 메시지 속성들을 명시
자세한 내용은 “5.2.5. MESSAGE_PROPERTIES_T”를 참고
payload
사용자가 지정하는 payload
현재는 RAW 타입만 가능
msgid
dequeue된 메시지에 대한 식별자
DEQUEUE 프로시저 예제 수행을 위한 사전준비
예제
DEQUEUE_ARRAY
여러 메시지를 한꺼번에 dequeue하고 그것을 payload의 배열, 메시지 속성의 배열, 메시지 식별자의 배 열로 반환하는 함수입니다. 함수의 반환값은 성공적으로 dequeue된 메시지의 개수입니다.
dequeue_options에 명시된 wait 시간은 dequeue를 수행할 때 queue에 dequeue할 메시지가 아무것도 존 재하지 않을 때만 적용됩니다. 만일 dequeue할 수 있는 메시지가 queue에 하나 이상 존재하면 DEQUEUE_AR RAY 함수는 최대 array_size 만큼의 메시지를 dequeue한 후 즉시 리턴됩니다.
dequeue_options로 msgid는 명시할 수 없습니다. navigation 파라미터와 관련한 내용은 “5.2.3. DEQUEUE_OPTIONS_T”를 참고합니다.
DEQUEUE_ARRAY 함수의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
queue_name
메시지들을 dequeue할 queue의 이름을 명시
dequeue_options
dequeue할 모든 메시지에 동일하게 적용되는 옵션을 명시
자세한 내용 은 “DEQUEUE_OPTIONS_T”를 참고
array_size
dequeue할 메시지의 수를 지정
message_properties_array
반환되는 메시지 속성들에 대한 배열
자세한 내용은 “MES SAGE_PROPERTIES_ARRAY_T”를 참고
payload_array
반환되는 payload들에 대한 배열
자세한 내용은 “PAYLOAD_AR RAY_T”를 참고
msgid_array
dequeue된 메시지들의 메시지 식별자가 반환되는 배열
자세한 내용은 “MSGID_ARRAY_T”를 참고
DEQUEUE_ARRAY 함수 예제 수행을 위한 사전준비
예제
ENQUEUE
대상 queue에 메시지를 하나 enqueue합니다. 복수 소비자 queue에 enqueue를 수행할 때 이 queue에 디폴 트 구독자가 하나도 등록되어 있지 않은 상태에서 수신자를 명시하지 않으면 메시지를 전달할 곳이 없으므로 에러를 반환합니다.
ENQUEUE 프러시저의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
queue_name
메시지를 enqueue할 queue의 이름을 명시
enqueue_options
enqueue할 모든 메시지에 동일하게 적용되는 옵션을 명시
자세한 내용 은 “ENQUEUE_OPTIONS_T”를 참고
message_properties
enqueue할 메시지들의 메시지 속성을 명시
자세한 내용은 “MESSAGE_PROPERTIES_T”를 참고
payload
사용자가 지정하는 payload
현재는 RAW 타입만 가능
msgid
시스템이 부여한 메시지 식별자를 반환
유일성이 보장되며 dequeue할 때 메시지 식별 용도로 사용 가능
ENQUEUE 프로시저 예제 수행을 위한 사전준비
예제
ENQUEUE_ARRAY
이 함수는 각각의 해당되는 메시지 속성과 함께 여러 payload를 한꺼번에 enqueue하는 함수입니다. 완료와 함께 enqueue된 메시지의 식별자들을 담는 배열이 반환됩니다. 함수의 반환값은 성공적으로 enqueue된 메시지의 개수입니다.
ENQUEUE_ARRAY 함수의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
queue_name
메시지들을 enqueue할 queue의 이름을 명시
enqueue_options
enqueue할 모든 메시지에 동일하게 적용되는 옵션을 명시
자세한 내용 은 “ ENQUEUE_OPTIONS_T”를 참고
array_size
enqueue할 메시지의 수를 지정
message_properties_array
enqueue할 메시지들의 메시지 속성에 대한 배열
자세한 내용은 “MESSAGE_PROPERTIES_ARRAY_T”를 참고
payload_array
enqueue할 메시지들의 payload에 대한 배열
자세한 내용은 “PAYLOAD_ARRAY_T”를 참고
msgid_array
enqueue된 메시지들의 메시지 식별자가 반환되는 배열
자세한 내용은 “MSGID_ARRAY_T”를 참고
ENQUEUE_ARRAY 함수 예제 수행을 위한 사전준비
예제
Last updated

