트리거 구성 질문 0 2 1,630

by 연금술사 [Oracle 기초] [2014.02.20 10:50:00]


안녕하세요.

사용자 정보를 받고 있는 테이블에서 column 컬럼(최대 20자리)을 암호화 하는 일이 생겨서 문의를 드립니다.
소스를 수정할 수 없어 방법을 찾다가 트리거라는 것을 알게 되어 보고 있는데요.
의문이 생겨 문의를 드립니다.

현 상태는 사용자 정보가 일정 시간마다 수십에서 수백건씩 들어오고 있습니다.

insert 할때 트리거를 걸려고 하니 부하가 많이 걸리것 같아 이것 저것 찾아보니  statement insert 이걸 사용하면 
한건 한건 트리거가 실행되는게 아니라 모든 insert가 끝나고 한번만 실행이 되는것 같아 아래와 같이 구성을 했습니다.

create or replace trigger test_trigger
after statement insert
  on test_table(column)
bebin
  update test_table
  set column = RAWTOHEX(DBMS_CRYPTO.HASH(TO_CLOB(TO_CHAR(column)), 3))
  where length(column) < 21
end;

아직 DBMS_CRYPTO 권한을 받지 못해서 테스트는 못하고 구글링만 하고 있습니다.

제가 정확히 알고 한건지 조언 부탁드립니다.

by 마농 [2014.02.20 16:21:07]
-- 한건씩 돌리나 한번에 돌리나 마찬가지 아닐런지요?
-- 오히려 테이블 건수가 많아질수록 한번에 처리하는 것이 불리할 듯 한데요.
-- - 한건씩 처리 : 아무런 추가 조회 없이 입력건에 대해서만 실행하지만
-- - 한번에 처리 : 처리 대상건을 조회해야만 하고, 이때 인덱스를 탈 수 없어 풀스캔을 해야 합니다.
-- 또한 Insert 한번이면 될 것을 Insert, Update 두번 해야 하고
-- Insert 에 대한 부하보다 Update 에 대한 부하가 더 크며
-- 갱신 컬럼의 길이가 늘어나는 경우, Row Chaining 이나 Row Migration 이 발생될 수 있습니다.
CREATE OR REPLACE TRIGGER test_trigger
BEFORE INSERT ON test_table
FOR EACH ROW
BEBIN
    :NEW.column = 암호화(:NEW.column);
END;
/

by 연금술사 [2014.02.21 15:35:31]
소중한 정보 감사합니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입