내용 목차
본 장에서는 DBMS_AQADM 패키지의 기본 개념과 패키지 내의 프러시저와 함수를 사용하는 방법을 설명한다.
본 절에서는 DBMS_AQADM 패키지에서 제공하는 프러시저와 함수를 알파벳 순으로 설명한다.
대상 queue에 디폴트 구독자를 추가하는 프러시저이다. 메시지를 enqueue할 때 수신자 목록을 대상으로 하거나 디폴트 구독자 목록을 대상으로 하여 enqueue할 수 있다.
이 프러시저는 복수 소비자 queue에 대해서만 수행이 가능하고 프러시저가 실행되면 이를 포함한 트랜잭션은 커밋된다. 프러시저가 성공적으로 종료된 이후의 enqueue는 해당 디폴트 구독자를 반영한다.
ADD_SUBSCRIBER 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_AQADM.ADD_SUBSCRIBER ( queue_name IN VARCHAR2, subscriber IN DBMS_AQ.AQ$_AGENT );
파라미터
파라미터 | 설명 |
---|---|
queue_name | 추가할 queue의 이름이다. |
subscriber | 구독자를 명시하는 DBMS_AQ.AQ$_AGENT 타입의 agent이다. |
예제
DECLARE subscriber dbms_aq.aq$_agent; BEGIN subscriber.name := 'RED'; DBMS_AQADM.ADD_SUBSCRIBER( queue_name => 'my_multi_q', subscriber => subscriber); END; /
대상 queue 테이블에 queue를 생성하는 프러시저이다. CREATE_QUEUE로 queue를 생성한 후 START_QUEUE를 호출하여 queue를 활성화시킬 수 있다. 디폴트로 enqueue와 dequeue 모두 비활성화된 채로 queue가 생성된다.
CREATE_QUEUE 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_AQADM.CREATE_QUEUE ( queue_name IN VARCHAR2, queue_table IN VARCHAR2, queue_comment IN VARCHAR2 DEFAULT NULL );
파라미터
파라미터 | 설명 |
---|---|
queue_name | 생성할 queue의 이름이다. 스키마 내에서는 유일해야 하며 일반적인 객체의 이름을 부여할 때와 동일한 규칙이 적용된다. |
queue_table | queue를 저장할 queue 테이블의 이름이다. |
queue_comment | queue에 대한 사용자 지정 주석을 명시한다. 이후 정적 뷰를 통해 조회가 가능하다. |
예제
begin dbms_aqadm.create_queue_table ('my_qtbl', 'RAW', multiple_consumers=>false); dbms_aqadm.create_queue ('my_q', 'my_qtbl'); end; /
queue 테이블을 생성하는 프러시저이다. queue 테이블을 생성할 때 dequeue 순서를 결정하는 정렬 키를 지정할 수 있다. 저장 데이터 타입은 현재 RAW 만 가능하다.
CREATE_QUEUE_TABLE 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_AQADM.CREATE_QUEUE_TABLE ( queue_table IN VARCHAR2, queue_payload_type IN VARCHAR2, storage_clause IN VARCHAR2 DEFAULT NULL, sort_list IN VARCHAR2 DEFAULT 'ENQ_TIME', multiple_consumers IN BOOLEAN DEFAULT FALSE, table_comment IN VARCHAR2 DEFAULT NULL );
파라미터
파라미터 | 설명 |
---|---|
queue_table | 생성할 queue 테이블의 이름이다. |
queue_payload_type | 저장할 사용자 데이터의 타입을 지정한다. 현재는 RAW 만 가능하다. |
storage_clause | 저장 파라미터를 지정한다. queue 테이블을 생성하기 위하여 CREATE TABLE 문을 수행할 때 이 파라미터가 포함된다. |
sort_list | 오름차순으로 정렬할 정렬 키 컬럼을 지정한다. 이 파라미터를 명시되지 않으면 FIFO 순서와 동일하게 enqueue된 시간의 오름차순으로 정렬된다. (ENQ_TIME) 다음과 같은 형식으로 지정하며 가능한 컬럼 이름은 PRIORITY와 ENQ_TIME이다. 두 컬럼이 동시에 명시되면 앞에 나온 컬럼값이 우선되어 정렬된다. sort_column_1[,sort_column_2] 위와 같이 정렬 순서를 지정하여 queue 테이블을 생성하면 정렬 순서는 바꿀 수 없고 queue 테이블에 생성되는 모든 queue는 동일한 정렬 순서를 갖는다. 단, dequeue할 때 msgid 또는 correlation을 지정하면 정렬 순서를 무시하고 특정 메시지를 dequeue할 수 있다. |
multiple_consumers |
|
table_comment | queue table에 대한 사용자 지정 주석을 명시한다. 이후 정적 뷰를 통해 조회가 가능하다. |
예제
begin dbms_aqadm.create_queue_table ('my_multi_qtbl', 'RAW', sort_list=> 'PRIORITY,ENQ_TIME', multiple_consumers=>true); end; /
기존의 queue를 제거하는 프러시저이다. STOP_QUEUE를 통해 enqueue와 dequeue가 모두 비활성화 되기 전에는 DROP_QUEUE의 수행은 허용되지 않는다. queue가 제거되면 queue에 저장된 모든 데이터는 같이 삭제된다.
DROP_QUEUE 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_AQADM.DROP_QUEUE ( queue_name IN VARCHAR2 );
파라미터
파라미터 | 설명 |
---|---|
queue_name | 제거할 queue의 이름이다. |
예제
begin dbms_aqadm.stop_queue ('my_multi_q'); dbms_aqadm.drop_queue ('my_multi_q'); end; /
기존의 queue 테이블을 제거하는 프러시저이다. queue 테이블을 제거하기 전에 queue 테이블 내의 모든 queue를 정지시키고 제거한 이후에만 queue 테이블을 제거할 수 있다. 그러나 force 옵션을 주면 이러한 동작이 자동으로 수행된다.
DROP_QUEUE_TABLE 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_AQADM.DROP_QUEUE_TABLE ( queue_table IN VARCHAR2, force IN BOOLEAN DEFAULT FALSE );
파라미터
파라미터 | 설명 |
---|---|
queue_table | 제거할 queue 테이블의 이름이다. |
force |
|
예제
begin dbms_aqadm.drop_queue_table ('my_multi_qtbl', true); end; /
Tibero Advanced Queuing 시스템 특권을 사용자 또는 역할에게 부여하는 프러시저이다. 부여 가능한 특권은 ENQUEUE_ANY, DEQUEUE_ANY, MANAGE_ANY이다. 단, 처음에는 SYS 사용자 또는 DBA 역할이 부여된 사용자만이 이 프러시저를 수행할 수 있다.
DBMS_AQADM 패키지의 프러시저를 수행하기 위해서는 DBMS_AQADM 패키지에 대해 EXECUTE 권한이 있어야 한다. 마찬가지로 dequeue와 enqueue의 수행을 위해서는 DBMS_AQ 패키지에 대해 EXECUTE 권한이 있어야 한다.
DBMS_AQADM 패키지의 프러시저가 다루는 객체가 프러시저를 호출한 스키마에 속할 경우 이 패키지에 대해 EXECUTE 권한만 있으면 더 이상의 특권이 필요없이 프러시저의 수행이 허용된다. 마찬가지로 자기 자신의 스키마에 생성한 queue에 대해 enqueue 또는 dequeue를 수행할 때는 DBMS_AQ 패키지에 대해 EXECUTE 권한만 있으면 수행이 허용된다.
GRANT_SYSTEM_PRIVILEGE 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_AQADM.GRANT_SYSTEM_PRIVILEGE ( privilege IN VARCHAR2, grantee IN VARCHAR2, admin_option IN BOOLEAN DEFAULT FALSE );
파라미터
파라미터 | 설명 |
---|---|
privilege | 부여할 Tibero Advanced Queuing 시스템 특권을 지정한다. 부여 가능한 특권은 다음과 같다.
|
grantee | 부여받을 대상(사용자, 역할, PUBLIC)을 명시한다. |
admin_option | 시스템 특권을 ADMIN 옵션과 함께 부여할지를 지정한다. ADMIN 옵션과 함께 특권이 부여되면 부여받은 대상은 이 프러시저를 호출하여 권한을 다른 사용자 또는 역할에 부여해줄 수 있다. (기본값: FALSE) |
예제
begin dbms_aqadm.grant_system_privilege ('MANAGE_ANY', 'test_aq'); end; /
디폴트 구독자를 해당 queue에서 제거하는 프러시저이다. 이 프러시저가 실행되면 이를 포함한 트랜잭션은 커밋되며 구독자와 관련된 메시지 및 정보는 삭제된다.
REMOVE_SUBSCRIBER 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_AQADM.REMOVE_SUBSCRIBER ( queue_name IN VARCHAR2, subscriber IN DBMS_AQ.AQ$_AGENT );
파라미터
파라미터 | 설명 |
---|---|
queue_name | queue의 이름이다. |
subscriber | 제거할 agent를 명시한다. (타입: DBMS_AQ.AQ$_AGENT) |
예제
DECLARE subscriber dbms_aq.aq$_agent; BEGIN subscriber.name := 'RED'; DBMS_AQADM.remove_subscriber ( queue_name => 'my_multi_q', subscriber => subscriber); END; /
Tibero Advanced Queuing 시스템 특권을 사용자 또는 역할로부터 회수하는 프러시저이다. 회수 가능한 특권은 ENQUEUE_ANY, DEQUEUE_ANY, MANAGE_ANY이다. 단, 시스템 특권의 ADMIN 옵션만 선택적으로 회수하는 것은 불가능하다.
REVOKE_SYSTEM_PRIVILEGE 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_AQADM.REVOKE_SYSTEM_PRIVILEGE ( privilege IN VARCHAR2, grantee IN VARCHAR2 );
파라미터
파라미터 | 설명 |
---|---|
privilege | 회수할 Tibero Advanced Queuing 시스템 특권을 지정한다. 회수 가능한 특권은 다음과 같다. 단, ADMIN 옵션만 선택적으로 회수하는 것은 불가능하다.
|
grantee | 회수할 대상(사용자, 역할, PUBLIC)을 명시한다. |
예제
begin dbms_aqadm.revoke_system_privilege ('MANAGE_ANY', 'test_aq'); end; /
해당 queue의 enqueue 또는 dequeue 기능을 활성화하는 프러시저이다. queue를 생성하고 나면 START_QUEUE 프러시저를 통해 queue를 활성화해야 하며, 디폴트로 enqueue와 dequeue가 동시에 활성화된다. 이 동작은 종료와 함께 즉시 반영되며 포함하고 있는 트랜잭션에 영향을 주지 않는다.
START_QUEUE 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_AQADM.START_QUEUE ( queue_name IN VARCHAR2, enqueue IN BOOLEAN DEFAULT TRUE, dequeue IN BOOLEAN DEFAULT TRUE );
파라미터
파라미터 | 설명 |
---|---|
queue_name | 활성화할 queue의 이름을 명시한다. |
enqueue | enqueue 기능을 활성화할지를 명시한다.
|
dequeue | dequeue 기능을 활성화할지를 명시한다.
|
예제
begin dbms_aqadm.create_queue_table ('my_qtbl', 'RAW', multiple_consumers=>false); dbms_aqadm.create_queue ('my_q', 'my_qtbl'); dbms_aqadm.start_queue ('my_q'); end; /
해당 queue의 enqueue 또는 dequeue 기능을 비활성화하는 프러시저이다. 디폴트로 enqueue와 dequeue를 동시에 비활성화시키며, queue에 대해 트랜잭션이 진행중일 때에는 queue를 비활성화시킬 수 없다. 이 동작은 종료와 함께 즉시 반영되며 포함하고 있는 트랜잭션에 영향을 주지 않는다.
STOP_QUEUE 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_AQADM.STOP_QUEUE ( queue_name IN VARCHAR2, enqueue IN BOOLEAN DEFAULT TRUE, dequeue IN BOOLEAN DEFAULT TRUE, wait IN BOOLEAN DEFAULT TRUE );
파라미터
파라미터 | 설명 |
---|---|
queue_name | 비활성화할 queue의 이름을 명시한다. |
enqueue | enqueue 기능을 비활성화할지를 명시한다.
|
dequeue | dequeue 기능을 비활성화할지를 명시한다.
|
wait | 현재 진행 중인 트랜잭션이 있다면 그것을 기다릴 것인지를 지정한다.
|
예제
begin dbms_aqadm.stop_queue ('my_multi_q'); end; /