오라클 트리거(TRIGGER)

hyunmoo0_0·2021년 12월 24일
0

트리거(TRIGGER)란 무엇인가?

트리거는 데이터베이스 이벤트에 반응하여 실행되는 프로그램 단위입니다. 
트리거의 주요 사용 목적은 테이블 데이터의 무결성 보장, 데이터베이스 관리의 
자동화 등이라고 할 수 있습니다.

DML 트리거(TRIGGER)란?

DML 트리거는 DML 문(INSERT, UPDATE, DELETE)이 테이블의 하나 이상의 데이터에 
영향을 미칠 때에 자동으로 실행되는 트리거 입니다. 
프로시저나 함수는 사용자가 직접 호출해야만 하지만, 트리거는 오라클에서 
사용자에게 알려주지 않고 자동으로 호출하여 처리합니다.

DML 트리거(TRIGGER)의 특징

  • 자동으로 실행되며 수동으로는 실행할 수 없습니다.
  • 어떤 동작에서 실행되는지 지정해야 합니다.
  • 작동이 일어난 트리거 대상 테이블에 대해서는 트리거 내용이 존재할 수 없습니다.
  • BEFORE, AFTER 두 가지 트리거가 있습니다.
  • 트랜잭션 일부로 처리됩니다. (COMMIT, ROLLBACK, SAVEPOINT 문장 포함 못함)

그럼 이제 DML 트리거 생성을 하는 방법에 대해서 알아 보도록 하겠습니다.

트리거 관리

  • 활성화/ 비활성화
    ALTER TRIGGER 트리거_이름 {DISABLE | ENABLE}

  • 테이블에 속한 트리거 활성화/ 비활성화
    ALTER TABLE 테이블_이름{DISABLE | ENABLE} ALL TRIGGER;

  • 트리거 수정 후 재컴파일
    ALTER TRIGGER 트리거_이름 COMPILE;

  • 트리거 삭제
    DROP TRIGGER 트리거_이름;

  • 트리거 조회
    SELECT * FROM USER_TRIGGERS;

트리거 장단점

장점

  1. 데이터 무결성 강화 (참조 무결성)

: 물류를 예로 들면 견적등록하고,수주까지 등록하고 난뒤 견적테이블의 수주여부(Y/N) 칼럼을 변경해야 될 경우, 견적테이블의 수주여부를 변경해주는 쿼리를 다시 요청하는것보다, 수주를 INSERT할 떄 트리거를 이용하여 바로 견적을 수정하는게 더 빠르고 안전하다고 한다.

  1. 업무 규칙의 설정

: 트리거에서 사용자 정의예외를 직접 설정할 수 있으므로 복잡한 업무 규칙 제약조건을 좀 더 편하고 효율적으로 표현 할 수 있다고 한다.

  1. 감사기능의 확장

: 상세한 변경 내역을 트리거를 이용해서 쉽고 편하게 관리 할 수 있다(다만,이경우는 큰 프로젝트의 경우 오라클 성능에 부담을 많이 준다)

단점

유지보수의 어려움

:트리거는 고질적인 유지 보수 문제를 야기한다. 트리거는 직접 실행되지 않는 작은 코드다. 그저 다른 작업의 부산물로“발생”할뿐이다. 작업이 부산물로 이루어지기 때문에 사람들은 트리거가있다는 사실을 종종 잊곤 한다(그리고 모든 부산물에 대한 코드 검토가 불가능한 것은 아니지만 어렵다).

또 담당자가 바뀌거나 업무를 인수인계할때 제대로 전달이 안되면 트리거 오류를 찾아내기도 어렵다.(트리거 유무자체도 모르고 있었다면 다른곳에서 계속 오류를 찾겠지) 그리고 덕지덕지 붙어있는 트리거들은 업무를 분석하는대도 더 복잡하고 어렵게 만든다.

만약 완벽한 인수인계와 적절한 문서화작업으로 프로젝트의 모든 트리거를 다알아서 유지보수문제를 어느정도 해결한다고 해도 트리거 자체가 문제를 발생시킬 수 있다.개발자가 트리거를 생성할때는 생각하지못한 오류가 추후에 생기면 그 트리거 오류들을 또 해결해야하므로 2차적인 오류가 생긴다.

결론

따라서, 트리거를 사용해서 얻을 수 있는 장점(좀더 빠르고 안전)보다 단점(유지보수의어려움,예상치못한오류들이생길가능성)이 더 타격이 크므로 현업에서는 트리거를 많이 쓰지는 않는다고 한다고 한다고 한다.

profile
안녕하세요~

0개의 댓글