오라클 성능 트러블슈팅의 기초 (2012년)
DBMS_PIPE 0 0 43,450

by 구루비스터디 DBMS_PIPE PLSQL 패키지 [2023.09.05]


DBMS_PIPE

  • 이 패키지를 사용하면 하나의 인스턴스에서 여러 세션간의 작업 순서를 제어할 수 있다.
  • DBMS_PIPE 패키지중에 RECEIVE_MESSAGE를 사용하면 누군가가 메시지를 보낼때까지 기다리게 하는 것이 가능하다.

SQL> create or replace procedure wait_for_signal(p_maxwait number default dbms_pipe.maxwait)
is
v_status number;
v_received varchar2(1);
begin
v_status := dbms_pipe.receive_message('signal',p_maxwait); //named pipe의 메세지를 로컬 버퍼로 전송(파이프명,대기시간)
if v_status = 0 then
dbms_pipe.unpack_message(v_received);//로컬 버퍼로부터 메세지를 읽는다. (값)
end if;
end wait_for_signal;
/

  • 메시지를 보내는 함수를 만들어 보자.

SQL> create or replace procedure signal
is
v_status number;
begin
dbms_pipe.pack_message('Y'); //로컬 메세지 버퍼에 메세지를 생성한다. (값)
v_status := dbms_pipe.send_message('signal'); //로컬 버퍼에 있는 메세지를 named pipe에 보낸다. (파이프명)
// 해당 파이프가 명시적으로 생성된 것이 아니면, 암시적으로 해당 파이프명을 가지는 Public 파이프를 생성한다.
end signal;
/

  • 다음과 같이 실행하면 된다.

--- session #1
SQL> exec dbms_application_info.set_client_info('session1');
SQL> exec wait_for_signal;

--- session #2
SQL> exec signal;

  • singal 실행 후 session 1에 작업이 가능하게 된다.

--- session #1
SQL> select count(*) from all_objects;

  • session 1 입장에서의 테스트 내용은 다음과 같다.

SYS@CX3WAS1 >exec dbms_application_info.set_client_info('session1');

PL/SQL procedure successfully completed.

SYS@CX3WAS1 >exec wait_for_signal;

PL/SQL procedure successfully completed.

SYS@CX3WAS1 >select count(*) from all_objects;

  COUNT(*)
----------
     23870

SYS@CX3WAS1 >col event format a30
SYS@CX3WAS1 >select * from ( select session_id, event, sql_id from v$active_session_history
  2  where session_id = &sid
  3  order by sample_time desc ) where rownum <= 5;
Enter value for sid: 400
old   2: where session_id = &sid
new   2: where session_id = 400

SESSION_ID EVENT                          SQL_ID
---------- ------------------------------ -------------
       400                                9tz4qu4rj9rdp
       400 log file sync
       400                                696urnsam1bqj
       400
       400                                g58hdppd54vru


"데이터베이스 스터디모임" 에서 2012년에 "오라클 성능 트러블슈팅의 기초 " 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/4273

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입