ProSync가 동기화 과정 속에 DML을 Target DB에 반영 중 에러가 발생할 수 있다. 일반적인 경우에는 ProSync가 해당 DML에 대한 반영을 성공할 때까지 재시도하게 된다.
해당 기능을 사용하면 특정한 에러에 대해 재시도하는 대신 해당 DML에 대한 반영을 생략하고 이후의 동기화를 진행하도록 설정할 수 있다.
또한 DISCARD 기능이 발생한 이력을 기록하는 Discard file 을 작성할 수 있다.
해당 기능을 사용하기 위해선 config 파일에 다음과 같은 Parameter를 설정해야 한다.
DISCARD_YN=[Y|N]
DISCARD_EC=2 10007 8033
DISCARD_FILE_YN=[Y|N]
DISCARD_FILE_DIR=/directory/to/save/file
DISCARD_FILE_SIZE=200M
DISCARD_BACKUP_DIR=/directory/to/save/backup/file
DISCARD_BACKUP_SIZE=10GDISCARD_YN
ProSync가 Source DB의 값을 Target DB의 데이터 타입으로 변환하지 못하면(지원하지 않는 timestamp 지역 정보 등) 해당 DML은 반영에 실패하고, 일반적인 경우에는 성공할 때까지 재시도하게 된다.
DISCARD_CAST_ERR=Y로 설정하면 변환에 실패한 DML을 재시도하지 않고 건너뛴 뒤 이후의 동기화를 진행한다. 건너뛴 DML은 Target DB에 반영되지 않는다.
DDL도 DML과 마찬가지로 Target DB에 반영 중 에러가 발생할 수 있다. 일반적인 경우에는 ProSync가 해당 DDL에 대한 반영을 성공할 때까지 재시도하게 된다.
해당 기능을 사용하면 재시도하는 대신 해당 DDL에 대한 반영을 생략하고 이후의 동기화를 진행하도록 설정할 수 있다.
또한 DISCARD 기능이 발생한 이력을 기록하는 Discard file 을 작성할 수 있다.
해당 기능을 사용하기 위해선 config 파일에 다음과 같은 Parameter를 설정해야 한다.
DISCARD_DDL_FILE_SIZE
discard 파일의 최대 크기를 지정하는 파라미터.
유형: int32
범위: 1M - 1G
기본값: 100M
DISCARD_DDL_BACKUP_DIR
discard 파일의 크기가 설정한 최대 크기를 초과하게 되면 생성하는 백업파일의 위치를 지정하는 파라미터.
유형: 디렉토리
범위: -
기본값: $PRS_HOME/var/<인스턴스명>/ddl_err/backup
DISCARD_DDL_BACKUP_SIZE
backup 디렉토리의 최대 크기를 지정하는 파라미터.
유형: uint64
범위: 0 - 128G
기본값: 0
동기화 중 에러가 발생하는 경우에 스킵할지 여부를 설정한다. Y 상태에선 발생한 에러가 DISCARD_EC 에 작성된 에러코드에 속해있는 경우 재시도를 생략한다.
유형: Y/N
범위: Y/N
기본값: N
DISCARD_EC
재시도를 하지 않고 건너뛰고자 하는 에러코드를 입력한다.
유형: 에러코드
범위: 최대 256개
기본값:
DISCARD_FILE_YN
DISCARD 동작이 발생했을 때 해당 내용을 discard 파일에 남기는 기능을 활성화 하는 파라미터이다.
유형: Y/N, dynamic
범위: Y/N
기본값: N
DISCARD_FILE_DIR
discard file의 저장 위치를 지정하는 파라미터.
유형: 디렉토리
범위: -
기본값: (LOG_DIR과 같은 디렉토리)
DISCARD_FILE_SIZE
discard 파일의 최대 크기를 지정하는 파라미터.
유형: int32, dynamic
범위: 1M - 1G
기본값: 100M
DISCARD_BACKUP_DIR
discard 파일의 크기가 설정한 최대 크기를 초과하게 되면 생성하는 백업파일의 위치를 지정하는 파라미터.
유형: 디렉토리
범위: -
기본값: (LOG_BACKUP_DIR과 같은 디렉토리)
DISCARD_BACKUP_SIZE
backup 디렉토리의 최대 크기를 지정하는 파라미터.
유형: uint64, dynamic
범위: 0 - 128G
기본값: 0(무제한)
DISCARD_CAST_ERR
데이터 변환에 실패한 DML을 재시도하지 않고 건너뛸지 여부를 설정한다. DISCARD_YN, DISCARD_EC 설정과 무관하게 동작한다.
유형: Y/N
범위: Y/N
기본값: N
DISCARD_DDL_YN
동기화 중 에러가 발생하는 경우에 스킵할지 여부를 설정한다.
유형: Y/N
범위: Y/N
기본값: N
DISCARD_DDL_FILE_YN
DISCARD 동작이 발생했을 때 해당 내용을 discard 파일에 남기는 기능을 활성화 하는 파라미터이다.
유형: Y/N
범위: Y/N
기본값: N
DISCARD_DDL_FILE_DIR
discard file의 저장 위치를 지정하는 파라미터.
유형: 디렉토리
범위: -
기본값: $PRS_HOME/var/<인스턴스명>/ddl_err
DISCARD_CAST_ERR=[Y|N]
DISCARD_FILE_YN=[Y|N]DISCARD_DDL_YN=[Y|N]
DISCARD_DDL_FILE_YN=[Y|N]
DISCARD_DDL_FILE_DIR=/directory/to/save/file
DISCARD_DDL_FILE_SIZE=200M
DISCARD_DDL_BACKUP_DIR=/directory/to/save/backup/file
DISCARD_DDL_BACKUP_SIZE=10G데이터 충돌 발생 시, 처리방안에 대해 확인한다.
MAP Rule에서 소개한 Data Conflict Rule의 시나리오들을 정리한다. 옵션을 설정하는 방법은 해당 문서를 참고한다.
Data Conflict를 확인하려면 Row를 특정할 수 있어야 한다. ProSync에서는 이에 대한 기준을 Primary key로 두고 있다. Primary key 로 인해 충돌이 발생할 경우, Source Database, Target Database, Column Min(Max) 기준으로 데이터 Conflict에 대한 처리를 결정한다.
Insert문에서 충돌이 발생한다는 것은, 이미 데이터가 존재한다는 의미이다. 따라서 존재하는 데이터를 모두 Source Database 기준으로 맞춰주어야 한다.
Insert문을 Update로 변경하여 Conflict를 해소해준다.
Update에서의 데이터 충돌은 원하는 Row가 없다는 의미이다.
Update문을 Insert로 변경하여 Conflict를 해소해준다.
Delete에서의 데이터 충돌 또한 마찬가지로 Row가 없다는 의미가 된다.
Delete에 대한 추가적인 처리가 없이 넘어가면 된다.
Insert문의 충돌은 이미 데이터가 있을 때 발생하는데, Target Database 기준으로 맞춰야 하므로, 별도의 작업 없이 해당 처리를 건너뛴다.
Row가 없는 상황이 맞다고 판단하기 때문에 별도의 작업 없이 해당 처리를 건너뛴다.
Row가 없는 상황이 맞다고 판단하기 때문에 별도의 작업 없이 해당 처리를 건너뛴다.
위 두 경우에 대한 조합으로 볼 수 있다. 상황에 따라 Source 기준 또는 Target 기준에 맞춰 수행하는 시나리오다. 기준이 되는 것이 Database 단위가 아닌 Column 내 데이터의 대소 비교로 이루어진다는 점이 다르고, 이에 따라 충돌 처리 동작은 위의 Source / Target과 동일하게 작동한다.