본문 바로가기

업무/DB

[ORACLE] TRIGGER 트리거 확인/중지/시작하기

트리거의 사전적 의미

1) '사격에서, 소총 또는 권총의 총알을 발사하게 하는 장치'
2) '특정한 작동을 시작하기 위한 계기를 부여하는 순시 입력'
라고 정의되어 있는데 대부분 두번째의 뜻으로 사용된다.

 

오라클 트리거(ORACLE TRIGGER) 구문

1. 무결성 유지

트리거는 데이터베이스의 무결성 제약 조건을 강화하기 위해 사용된다.

예를 들어, 특정 테이블에 대한 무결성 규칙을 설정하고, 그 규칙을 위반하는 데이터 변경을 방지할 수 있다.

2. 이력 추적

트리거를 사용하여 데이터 변경 이력을 추적할 수 있다.

변경된 데이터를 다른 테이블에 복사하여 데이터 변경 이벤트를 기록하고 추적할 수 있다.

3. 자동화 작업

특정 이벤트가 발생하면 트리거를 사용하여 자동화 작업을 실행할 수 있다.

예를 들어, 주문 테이블에 새로운 주문이 추가될 때 재고 테이블에서 재고 수량을 자동으로 갱신할 수 있다.

 

 

오라클 트리거(ORACLE TRIGGER) 구문

-- 트리거 생성
CREATE OR REPLACE TRIGGER '트리거이름'
{BEFORE | AFTER}  
{INSERT | UPDATE | DELETE} 
ON '테이블명'
[FOR EACH ROW]
DECLARE
   -- 트리거 내에서 사용할 변수 선언
BEGIN
   -- 트리거에서 실행할 작업 정의
END;


-- 트리거 확인
SELECT TRIGGER_NAME, TABLE_NAME, STATUS
  FROM USER_TRIGGERS
 WHERE TABLE_NAME = '테이블명';

-- 트리거 DISABLE (중지)
ALTER TRIGGER '트리거이름' DISABLE;

-- 트리거 ENABLE (작동)
ALTER TRIGGER '트리거이름' ENABLE;


-- 잊지말기
commit;

[설명] 

- CREATE OR REPLACE TRIGGER : 새로운 트리거 생성 or 기존 트리거 대체
- {BEFORE | AFTER} : 트리거 작동 시기를 설정. 데이터 변경 전 또는 후에 작동
- {INSERT | UPDATE | DELETE} : 어떤 데이터 변경 작업에 작동할 것인지 지정
- ON '테이블명' : 트리거가 적용될 테이블을 지정
- [FOR EACH ROW] : row-level 트리거를 정의할 때 사용, 각 행에 대해 작동하도록 설정
- DECLARE, BEGIN : PL/SQL 블록 시작, 트리거 내에서 사용할 변수를 선언하고 작업을 정의

- COMMIT : 이전에 트리거 변경 작업 수행 후에 커밋을 하지 않아 트리거가 변경 전으로 돌아간 경우가 있었음.

 

 

결론

오라클 트리거는 데이터베이스의 무결성 유지, 비즈니스 규칙 적용, 데이터 변경 이력 추적 등 다양한 용도로 사용된다.

그러나 성능 및 보안 측면에서 주의가 필요하며, 정확하게 필요한 작업만을 트리거로 실행하여 데이터베이스의 안정성을 확보해야 한다.

 

이전 회사에서는 데이터베이스를 마치 DBA처럼 자유롭게 사용할 수 있어서 내 맘대로 트리거를 지지고 볶고 할 수 있었다.

현재는 디비팀이 따로 있어 트리거는 구경도 못한다는 사실.........

아무튼 이전 회사에서 처음 업무 파악을 할 때 어려웠던 부분은 (업무 인수인계가 제대로 되었다면 어렵지 않았을 테지만....)

업무 로직(자바)에는 테이블을 수정하는 부분이 없었는데 트리거를 확인해 보니 특정 테이블을 INSERT, UPDATE 하는 로직이 있었다.

이처럼 일관된 비지니스 규칙을 적용하는 데는 용이할 수 있지만 무분별하게 사용 시 성능이 저하될 수 있으므로

정말 필요한 작업만 명확한 기준으로 트리거를 발생시켜야 할 필요가 있다.