DBMS_APPLICATION_INFO 패키지 활용

DBMS_APPLICATION_INFO 패키지 활용

소개

Oracle의 DBMS_APPLICATION_INFO 패키지는 데이터베이스 세션에 대한 추가 컨텍스트 정보를 설정하고 관리하는 데 사용되는 강력한 도구입니다. 이 패키지를 활용하면 애플리케이션 이름, 모듈, 액션과 같은 세션 관련 정보를 데이터베이스에 등록하여, 성능 모니터링, 문제 해결, 감사 등의 작업을 효과적으로 수행할 수 있습니다.

DBMS_APPLICATION_INFO 패키지의 중요성

  • 성능 분석 및 튜닝: V$SESSION, V$SQLAREA 등의 뷰를 통해 어떤 애플리케이션, 모듈 또는 액션이 데이터베이스 리소스를 소비하는지 파악하여 성능 병목 현상을 식별하고 튜닝할 수 있습니다.
  • 문제 해결: 오류 발생 시, 오류를 발생시킨 애플리케이션 컨텍스트를 빠르게 파악하여 문제 해결 시간을 단축할 수 있습니다.
  • 감사 및 보안: 데이터베이스 활동을 감사할 때, 애플리케이션 정보를 포함하여 감사 로그를 생성함으로써 보다 정확하고 세분화된 감사를 수행할 수 있습니다.

주요 프로시저 및 함수

SET_MODULE

현재 세션의 모듈 및 액션 정보를 설정합니다.

DBMS_APPLICATION_INFO.SET_MODULE (
    module_name   IN VARCHAR2,
    action_name   IN VARCHAR2
);

SET_ACTION

현재 세션의 액션 정보를 설정합니다. 모듈 정보는 유지됩니다.

DBMS_APPLICATION_INFO.SET_ACTION (
    action_name   IN VARCHAR2
);

SET_CLIENT_INFO

클라이언트 정보를 설정합니다. 이 정보는 일반적으로 애플리케이션 버전, 사용자 정보 등과 같은 값을 포함합니다.

DBMS_APPLICATION_INFO.SET_CLIENT_INFO (
    client_info   IN VARCHAR2
);

SET_SESSION_LONGOPS

오래 걸리는 작업(Long Operations)에 대한 진행 상황을 모니터링합니다.

DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS (
    rindex          IN NUMBER,
    slno            IN NUMBER,
    op_name         IN VARCHAR2,
    target          IN VARCHAR2,
    context         IN NUMBER,
    sofar           IN NUMBER,
    totalwork       IN NUMBER,
    target_desc    IN VARCHAR2
);

READ_MODULE

현재 세션에 설정된 모듈 및 액션 정보를 읽어옵니다.

DBMS_APPLICATION_INFO.READ_MODULE (
    module_name   OUT VARCHAR2,
    action_name   OUT VARCHAR2
);

실습 예제

예제 1: 세션 정보 설정 및 확인

-- 세션 정보 설정
BEGIN
    DBMS_APPLICATION_INFO.SET_MODULE('Order Processing', 'Submit Order');
    DBMS_APPLICATION_INFO.SET_CLIENT_INFO('Application Version 1.0');
END;
/

-- 세션 정보 확인
SELECT SYS_CONTEXT('USERENV', 'MODULE'),
       SYS_CONTEXT('USERENV', 'ACTION'),
       SYS_CONTEXT('USERENV', 'CLIENT_INFO')
FROM   DUAL;

위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

MODULE             ACTION         CLIENT_INFO
------------------ -------------- ----------------------
Order Processing   Submit Order   Application Version 1.0

예제 2: Long Operations 모니터링

-- Long Operations 정보 설정
BEGIN
  DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS (
    rindex          => 1,
    slno            => 1,
    op_name         => 'Data Load',
    target          => 'SALES_TABLE',
    context         => 0,
    sofar           => 10000,
    totalwork       => 100000,
    target_desc    => 'Number of Rows Loaded'
  );
END;
/

이 정보를 확인하기 위해 V$SESSION_LONGOPS 뷰를 쿼리할 수 있습니다.

SELECT OPNAME, TARGET, SOFAR, TOTALWORK, TARGET_DESC
FROM V$SESSION_LONGOPS
WHERE SID = SYS_CONTEXT('USERENV', 'SID');

결과는 다음과 같이 나타날 수 있습니다.

OPNAME      TARGET         SOFAR  TOTALWORK TARGET_DESC
----------  ------------  -----  --------- --------------------
Data Load   SALES_TABLE   10000    100000  Number of Rows Loaded

실무 적용 가이드

  • 애플리케이션 시작 시 세션 정보 설정: 애플리케이션이 데이터베이스에 연결될 때마다 DBMS_APPLICATION_INFO 패키지를 사용하여 세션 정보를 설정합니다.
  • PL/SQL 코드에 적용: 저장 프로시저, 함수 등에서 DBMS_APPLICATION_INFO.SET_ACTION을 사용하여 현재 실행 중인 단계를 표시합니다.
  • 정기적인 모니터링: V$SESSION 뷰를 정기적으로 쿼리하여 활성 세션의 정보를 모니터링하고, 필요한 경우 성능 문제를 진단합니다.

주의 사항

  • DBMS_APPLICATION_INFO 패키지는 데이터베이스 성능에 직접적인 영향을 미치지 않지만, 과도한 사용은 오버헤드를 발생시킬 수 있습니다.
  • 설정된 정보는 휘발성이므로, 세션이 종료되면 정보가 사라집니다.
위로 스크롤