내용 목차
본 장에서는 DBMS_ALERT 패키지의 기본 개념과 패키지 내의 프러시저와 함수를 사용하는 방법을 설명한다.
DBMS_ALERT 패키지는 Tibero의 ALERT 기능과 관련한 프러시저와 함수를 제공한다. Tibero의 ALERT은 Tibero 데이터베이스와 통합되어 있는 알림/기다림 기능을 하는 패키지이다. 이는 영속적이지 않으며 서버가 재가동되면 모든 알림/기다림 정보는 사라진다.
ALERT기능은 보통 다음과 같이 사용한다.
기다릴 alert을 등록한다. (register)
기다린다. (waitone, waitany)
필요한 이벤트가 발생하면 다른 세션에서 alert을 발생시킨다. (signal)
1번에서 등록한 alert이나 3번에서 발생시킨 alert signal은 서버를 재가동할 때 사라진다.
다음은 DBMS_ALERT 패키지 내에 정의된 상수이다.
MAXWAIT CONSTANT INTEGER := 86400000
본 절에서는 DBMS_ALERT 패키지에서 제공하는 프러시저를 알파벳 순으로 설명한다.
기다릴 ALERT을 등록하는 프러시저이다. 등록된 ALERT은 REGISTER 프러시저를 수행한 세션에서만 유효하다. 중복해서 등록할 필요는 없다(무시됨). 다른 세션에서 ALERT을 기다리려면 새로 등록해야 한다.
프로토타입
DBMS_ALERT.REGISTER ( name IN VARCHAR2 );
파라미터
파라미터 | 설명 |
---|---|
name | 등록/기다릴 ALERT의 이름이다. |
예제
BEGIN DBMS_ALERT.REGISTER('ABC'); END; /
등록된 ALERT을 제거하는 프러시저이다. 이 프러시저는 프러시저를 수행하는 세션에만 영향을 준다. 즉, 다른 세션에서 등록한 동일 이름에 대해서는 영향을 주지 않는다. 등록되지 않은 ALERT을 REMOVE하려고 하면 에러가 발생한다.
프로토타입
DBMS_ALERT.REMOVE ( name IN VARCHAR2 );
파라미터
파라미터 | 설명 |
---|---|
name | 제거할 ALERT의 이름이다. |
예제
BEGIN DBMS_ALERT.REMOVE('ABC'); END; /
등록된 모든 ALERT을 제거하는 프러시저이다. 이 프러시저는 프러시저를 수행하는 세션에만 영향을 준다. 즉, 다른 세션에서 등록한 동일 이름에 대해서는 영향을 주지 않는다.
REMOVEALL 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_ALERT.REMOVEALL ( );
예제
BEGIN DBMS_ALERT.REMOVEALL(); END; /
ALERT을 발생시켜 이를 기다리고 있는 세션들을 깨워주는 프러시저이다.
프로토타입
DBMS_ALERT.SIGNAL ( name IN VARCHAR2, message IN VARCHAR2 );
파라미터
파라미터 | 설명 |
---|---|
name | 발생시킬 ALERT의 이름이다. |
message | 함께 전달할 메시지이다. 최대 128bytes까지 전송된다. |
예제
BEGIN DBMS_ALERT.SIGNAL('ABC', 'DEF'); END; /
어떠한 종류든 내가 등록한 ALERT을 기다리는 프러시저이다. 세션에서 이전에 등록했던 ALERT이 발생한 경우 깨어난다. 또한 타임아웃이 지나면 깨어날 수 있다. 특정 ALERT을 받아서 깨어나도 해당 ALERT이 자동으로 REMOVE되지 않는다.
프로토타입
DBMS_ALERT.WAITANY ( name OUT VARCHAR2, message OUT VARCHAR2, status OUT VARCHAR2, timeout IN VARCHAR2 );
파라미터
파라미터 | 설명 |
---|---|
name | WAITANY 프러시저가 깨어나도록 한 ALERT의 이름이다. 타임아웃으로 깨어난 경우 값이 없다. |
message | WAITANY 프러시저가 깨어나도록 한 ALERT과 함께 전달된 메시지이다. 타임아웃으로 깨어난 경우 값이 없다. |
status |
|
tiemout | 얼마나 기다릴지 설정하는 값이다. (단위: seconds) |
예제
set serveroutput on declare name varchar(1000); msg varchar(1000); status integer; begin dbms_alert.register('ABC'); dbms_alert.waitany(name, msg, status, 100000); dbms_output.put_line(name); dbms_output.put_line(msg); dbms_output.put_line(status); END; /
특정 ALERT을 기다리는 프러시저이다. 이전에 등록했던 ALERT만 기다릴 수 있으며, 등록하지 않은 ALERT을 지정하는 경우 에러가 발생한다. 또한 timeout이 지나면 깨어날 수 있다. 특정 ALERT을 받아서 깨어나도 해당 ALERT이 자동으로 REMOVE되지 않는다.
프로토타입
DBMS_ALERT.WAITONE ( name IN VARCHAR2, message OUT VARCHAR2, status OUT VARCHAR2, timeout IN VARCHAR2 );
파라미터
파라미터 | 설명 |
---|---|
name | 기다릴 ALERT의 이름이다. |
message | WAITANY 프러시저가 깨어나도록 한 ALERT과 함께 전달된 메시지이다. 타임아웃으로 깨어난 경우 값이 없다. |
status |
|
tiemout | 얼마나 기다릴지 설정하는 값이다. (단위: seconds) |
예제
set serveroutput on declare name varchar(1000); msg varchar(1000); status integer; begin dbms_alert.register('ABC'); dbms_alert.waitone('ABC', msg, status, 100000); dbms_output.put_line(msg); dbms_output.put_line(status); END; /