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