FAQ
replication conflict 발생원인과 해결방법
분류 이중화 등록일 2013-07-09 조회수 3479

1. replication 환경에서 데이터 충돌이 발생하는 경우는? (일반적인 경우)

replication conflict 는 동일한 key 값에 대하여 동시에 insert/update/delete 를
수행할 경우 발생합니다.

insert 의 경우를 예를 들면
1) A 서버에서 key=1 인 데이타가 insert 된 후 B서버로 이중화데이타를 전송하기 전에
2) B서버에서 동일한 key=1 데이타가 insert 될 경우 나중에 B서버에서 수신한 이중화
데이터는 이미 B서버에 동일한 key=1 인 데이타가 존재하므로 conflict 가 발생하게
됩니다.

2. conflict를 최대한 방지 할 수 있는 방안은 ?

가장 좋은 방법은 양쪽서버에서 동일한 Key 값으로 insert/update/delete 를 수행하지
않도록 하는 것입니다.
예를 들어 만약 특정테이블에 대하여 Sequence 가 primary key 일경우 한쪽은 홀수로
다른쪽 서버에는 짝수로만 데이타를 insert/update/delete 수행한다면 절대로
replication conflict가 발생되지 않습니다.
그리고 bulk 성 insert/update/delete 를 수행하지 않도록 해야 합니다.

알티베이스에서 지원하는 replication conflict resolution 은 다음의 3가지 방안이
있습니다.

1) User-Oriented Scheme
(1) insert conflict : 동일한 key를 가진 데이타를 insert하려는 경우, 반영하지
않습니다. (altibase_rp.log 에 Conflict Error Message 출력 )
(2) delete confilct : 동일한 key를 가진 데이타를 Delete하려는 경우, 반영하지
않습니다. (altibase_rp.log 에 Conflict Error Message 출력 )
(3) update conflict : 동일한 key를 가진 데이타를 Update하려는 경우 아래의 속성
값에 따라서 반영여부를 판단합니다.
- REPLICATION_UPDATE_REPLACE=1 : 갱신함
- REPLICATION_UPDATE_REPLACE=0 : 갱신하지 않으며 Conflict
Error Message 출력

2) Master-slave Scheme
이중화객체를 선언시 구문에 as master 또는 as slave 를 지정하면 다음과 같이 이중화
conflict를 처리합니다.
(1) Master 의 처리방식 : Insert/Update/Delete conflict 에 대하여 모두 반영하
지 않는다.
(2) Slave 의 처리방식
- Insert conflict : 기존에 존재하는 레코드를 삭제하고 새로운 레코드를 추가한다.
- Update conflict : 충돌을 무시하고 무조건 반영한다.
- Insert conflict : 반영하지 않는다.

3) Timestamp-based Scheme
REPLICATION_TIMESTAMP_RESOLUTION 프로퍼티 값을 1로 설정한 후 이중화테이블에
timestamp 컬럼을 사용하여 최신의 값으로 반영하는 방법입니다. 이 방법은 이중화대상
테이블 모두에 timestamp 컬럼을 추가해야 하고 이중화되는 양 서버간의 시간을 동일하
게 설정해야 하는 제약사항이 존재합니다.

목록