데이터 동기화 및 트리거 관련 질문드려요! 0 2 3,313

by 감사합니다 [PL/SQL] 트리거 동기화 [2016.02.24 10:42:46]


안녕하세요~ 디비 초짜 질문드립니다 (--)(__)

우선 상황을 설명하겠습니다!

상황
A디비의 A_TB 테이블 데이터가 B디비로 동기화가 되어야하는 상황
A_TB는 특정 기간에만 데이터가 쌓이는데 초당평균 10개의 ROW가 생성됨
55분 01초 9개 ROW 생성
55분 02초 11개 ROW 생성 ..
B디비에서는 B_PRO(?,?,?...) 프로시저 제공함

여기서 저는 단순하게 A_TB테이블에 트리거를 걸어서
ROW 생성 될때 B_PRO 를 실행 하면 되겠다고 생각했습니다

그런데 검색을 해보니 트리거가 실행되는 동안
A_TB 테이블이 잠시 사용할 수 없는 상황이 된다고 하더군요

그렇다면 01초에 9개의 ROW가 생성되어 트리거 발생으로 B_PRO가 실행되는 동안
02초에 A_TB 테이블에 11개의 ROW가 INSERT가 안되는 것인가요?

...

너무 이론적으로 접근했는지...
위와 같은 상황에서는 트리거 사용이 안된다면 혹시 어떤 방법이 있는지 궁금합니다 ㅠㅠ
부탁드립니다!!
미리 감사드려요!

by 마농 [2016.02.24 11:20:58]

트리거는 초단위로 한거번에 10개씩 작동하는게 아니라
입력되는 행 하나하나마다 동작합니다.
현재 입력 프로세스기 서로 간섭없이 정상적으로 여러곳에서 동시다발적으로 입력이 되고 있었다면?
트리거로 한다고 해서 이게 안되지는 않을 것입니다.

 

다만, 걱정스러운 것은...
속도입니다.
단일 서버에 입력될 때보다
두개 서버에 동시 입력을 해야 하니 입력 속도는 현저하게 느려질 것입니다.
예를 들어 0.001 초만에 1건이 입력된다고 가정했을 때
동시 두건 입력은 0.002 초가 걸릴 것인데. 이는 동일 서버일때이고
디비링크를 통해 다른 서버로 보낼 때는 망간 데이터 전송에 따른 지연시간이 추가로 더 걸릴 것입니다.
또한 프로시져 실행이라고 한다면 단순 입력보다는 시간이 더 걸릴 것입니다.

 

추가로 문제되는 것은.
장애에 대한 대비입니다.
동기화 서버에 이상이 발생한다던가?
네트웍 장애가 발생한 경우입니다.
이 경우 동기화를 진행하지 못하면 본래의 작업은 대기상태가 되거나 에러를 발생하게 됩니다.
예외처리를 통해 동기화 작업 성공여부와 관계 없이 본작업은 처리를 하도록 해야 할 수도 있으며
이 경우 동기화 하지 못한 자료에 대한 추후 이관 작업을 별도로 수행해야 합니다.

 

실시간 동기화가 반드시 필요한 경우가 아니라면?
트리거 보다는 주기적인 배치 작업이 좋을 듯 합니다.
본 테이블에는 동기화 여부 항목을 두고
특정 시간 주기로 동기화 안된 것만 일괄 전송하는 기능을 두면 됩니다.


by 감사합니다 [2016.02.24 11:43:09]

장문의 답변글 감사합니다 마농님!

저는 우선 동기화 가능성에 대해 알아봤는데요

마농님의 답변을 보니 실질적으로 고려해야될점이 많고 

동기화 때문에 원본 테이블이 장애가 날 위험성이 있을 것 같습니다..

동기화가 아니라 매일 새벽에 배치작업을 하는 것으로 제안해봐야겠네요

감사합니다 마농님!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입