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
'Database' 카테고리의 다른 글
[Oracle] 오라클 ALL_OBJECTS 뷰 완전 정복 : 객체 관리와 분석의 핵심 (0) | 2025.06.15 |
---|---|
[Oracle] 오라클 ALL_SYNONYMS 뷰 완벽 해설과 실무 활용법 (0) | 2025.06.15 |
[Oracle] 오라클 ALL_VIEWS 뷰 사용법과 실무 활용 전략 (0) | 2025.06.15 |
[Oracle] 오라클 ALL_SEQUENCES 뷰로 시퀀스 관리 완전 정복 (0) | 2025.06.15 |
[Oracle] 오라클 ALL_INDEXES 뷰로 인덱스 구조 완벽 분석하기 (0) | 2025.06.14 |