본문 바로가기
Database

[Oracle] 오라클 ALL_TRIGGERS 뷰로 트리거 관리와 분석 완전 정복

by 코드개미 2025. 6. 15.

오라클 ALL_TRIGGERS 뷰로 트리거 관리와 분석 완전 정복
[Oracle] ALL_TRIGGERS

 

Oracle 데이터베이스에서는 트리거(Trigger)를 사용하여 특정 테이블이나 뷰에서 DML 작업(INSERT, UPDATE, DELETE)이 발생할 때 자동으로 지정된 PL/SQL 코드를 실행할 수 있습니다. 이러한 트리거의 정의와 동작 방식, 그리고 상태를 확인하는 데 필수적으로 사용되는 뷰가 바로 ALL_TRIGGERS입니다. 본 글에서는 Oracle의 ALL_TRIGGERS 뷰에 대해 구조와 컬럼 설명, 실무 활용 예제, 성능 및 보안 고려사항 등을 포함한 실전 중심 내용을 소개합니다.

1. ALL_TRIGGERS란 무엇인가?

ALL_TRIGGERS는 사용자가 접근 가능한 트리거에 대한 정보를 제공하는 Oracle의 시스템 뷰입니다. 트리거가 적용된 테이블, 트리거의 유형(BEFORE/AFTER/INSTEAD OF), 트리거 이벤트(INSERT/UPDATE/DELETE), 실행 시점, 활성화 여부 등의 정보를 조회할 수 있습니다.

2. 주요 컬럼 설명

아래는 ALL_TRIGGERS 뷰에서 자주 사용되는 주요 컬럼입니다:

컬럼명 설명
TRIGGER_NAME 트리거의 이름
TRIGGER_TYPE BEFORE, AFTER, INSTEAD OF 중 하나
TRIGGERING_EVENT INSERT, UPDATE, DELETE 중 하나 또는 여러 개
TABLE_OWNER 트리거가 설정된 테이블의 소유자
TABLE_NAME 트리거가 설정된 테이블 이름
STATUS ENABLED 또는 DISABLED (활성화 여부)
DESCRIPTION 트리거에 대한 간단한 설명
TRIGGER_BODY 실행되는 PL/SQL 코드

3. USER_TRIGGERS, ALL_TRIGGERS, DBA_TRIGGERS 비교

트리거 관련 정보를 제공하는 세 가지 시스템 뷰의 차이를 아래 표로 정리했습니다:

뷰 이름 조회 대상 접근 권한
USER_TRIGGERS 자신이 소유한 트리거 일반 사용자
ALL_TRIGGERS 접근 가능한 모든 트리거 일반 사용자
DBA_TRIGGERS 전체 스키마의 트리거 DBA 권한 필요

4. 실무 활용 예제

4.1 특정 테이블에 설정된 트리거 목록 조회


SELECT TRIGGER_NAME, TRIGGER_TYPE, TRIGGERING_EVENT
FROM ALL_TRIGGERS
WHERE TABLE_NAME = 'ORDERS'
  AND TABLE_OWNER = 'SALES';
  

4.2 비활성화된 트리거 찾기


SELECT TRIGGER_NAME, STATUS
FROM ALL_TRIGGERS
WHERE STATUS = 'DISABLED';
  

4.3 AFTER 트리거만 필터링


SELECT TRIGGER_NAME
FROM ALL_TRIGGERS
WHERE TRIGGER_TYPE = 'AFTER';
  

4.4 특정 이벤트(INSERT)에 반응하는 트리거


SELECT TRIGGER_NAME
FROM ALL_TRIGGERS
WHERE TRIGGERING_EVENT LIKE '%INSERT%';
  

4.5 트리거 소스코드(PL/SQL) 조회


SELECT TRIGGER_BODY
FROM ALL_TRIGGERS
WHERE TRIGGER_NAME = 'AUDIT_ORDERS_TRG';
  

5. 트리거 성능 및 보안 고려사항

  • 트리거 내부에 복잡한 로직이 많을 경우, DML 성능 저하를 유발할 수 있습니다.
  • 트리거는 암묵적으로 실행되므로, 예상치 못한 부작용이 발생할 수 있어 코드 관리와 문서화가 중요합니다.
  • AFTER 트리거는 작업 완료 후 실행되므로 로깅 등에 적합하며, BEFORE 트리거는 데이터 변경을 막거나 수정할 때 유용합니다.
  • 트리거의 의존성은 ALL_DEPENDENCIES 뷰로 확인하여 유지보수 시 충돌을 방지할 수 있습니다.

6. 트리거 사용 시 추천 전략

  • 업데이트가 자주 발생하는 테이블에는 트리거를 최소화하거나 논리적으로 분리하는 것이 성능 유지에 도움됩니다.
  • 업무 규칙(비즈니스 로직)은 가능하면 트리거보다는 애플리케이션 또는 저장 프로시저에서 구현하는 것이 디버깅과 유지보수에 유리합니다.
  • 트리거 활성/비활성은 다음 명령어로 제어할 수 있습니다:
    
    ALTER TRIGGER 트리거명 ENABLE;
    ALTER TRIGGER 트리거명 DISABLE;
          

7. 트리거 유형 비교 표

트리거 유형 설명 실행 시점
BEFORE 데이터 변경 전에 실행 DML 이전
AFTER 데이터 변경 후 실행 DML 이후
INSTEAD OF VIEW에서 DML 발생 시 실행 DML 대신 실행

8. 결론

Oracle의 ALL_TRIGGERS 뷰는 데이터 무결성을 유지하고, 비즈니스 로직을 자동화하는 데 필수적인 트리거 객체의 상태 및 정의를 파악하는 데 매우 유용합니다. 실무에서는 예상치 못한 동작이나 성능 병목의 원인이 되는 경우가 많기 때문에, 이 뷰를 통해 정기적으로 트리거를 점검하고 문서화하는 습관을 가지는 것이 중요합니다.

9. 참고자료

  • Oracle Database 21c Reference Guide: https://docs.oracle.com/en/database/
  • 실제 프로젝트 트리거 정의 문서 및 운영 경험
  • Oracle PL/SQL Programming by Steven Feuerstein