제6장 DBMS_AQADM

내용 목차

6.1. 개요
6.2. 프러시저와 함수
6.2.1. ADD_SUBSCRIBER
6.2.2. CREATE_QUEUE
6.2.3. CREATE_QUEUE_TABLE
6.2.4. DROP_QUEUE
6.2.5. DROP_QUEUE_TABLE
6.2.6. GRANT_SYSTEM_PRIVILEGE
6.2.7. REMOVE_SUBSCRIBER
6.2.8. REVOKE_SYSTEM_PRIVILEGE
6.2.9. START_QUEUE
6.2.10. STOP_QUEUE

본 장에서는 DBMS_AQADM 패키지의 기본 개념과 패키지 내의 프러시저와 함수를 사용하는 방법을 설명한다.

DBMS_AQADM 패키지는 Tibero의 Advanced Queuing 기능을 구성하고 관리하는 데 사용할 수 있는 프러시저와 함수를 제공한다.

본 절에서는 DBMS_AQADM 패키지에서 제공하는 프러시저와 함수를 알파벳 순으로 설명한다.

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
    • FALSE: 단일 소비자 queue를 저장하는 queue 테이블을 만든다. (기본값)

    • TRUE: 복수 소비자 queue를 저장하는 queue 테이블을 만든다.

    table_commentqueue table에 대한 사용자 지정 주석을 명시한다. 이후 정적 뷰를 통해 조회가 가능하다.
  • 예제

    begin
    dbms_aqadm.create_queue_table ('my_multi_qtbl', 'RAW', sort_list=>
        'PRIORITY,ENQ_TIME', multiple_consumers=>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 시스템 특권을 지정한다.

    부여 가능한 특권은 다음과 같다.

    • ENQUEUE_ANY: 데이터베이스의 어떤 queue에 대해서도 enqueue를 수행할 수 있다.

    • DEQUEUE_ANY: 데이터베이스의 어떤 queue에 대해서도 dequeue를 수행할 수 있다.

    • MANAGE_ANY: 데이터베이스의 어떤 스키마 객체에 대해서도 DBMS_AQADM 프러시저를 수행할 수 있다.

    grantee부여받을 대상(사용자, 역할, PUBLIC)을 명시한다.
    admin_option

    시스템 특권을 ADMIN 옵션과 함께 부여할지를 지정한다.

    ADMIN 옵션과 함께 특권이 부여되면 부여받은 대상은 이 프러시저를 호출하여 권한을 다른 사용자 또는 역할에 부여해줄 수 있다. (기본값: FALSE)

  • 예제

    begin
    dbms_aqadm.grant_system_privilege ('MANAGE_ANY', 'test_aq');
    end;
    /