모든 페이지
1 / 3

Loading...

Loading...

Loading...

Discard

DML DISCARD

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=10G
파라미터 이름
설명

DISCARD_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 기능을 활성화하면 batch apply 기능이 사용 불가능하다.

  • DML을 반영할 때 발생하는 에러에 대해서만 DISCARD 기능을 지원한다.

  • (12032)Deadlock detected. 에러는 DISCARD 기능을 지원하지 않는다.

  • SAM_BIND_VALUE=Y 를 사용하면, discard log에 실패한 query의 value 값이 함께 저장된다.

변환 실패 DISCARD

주의

  • 건너뛴 DML은 Apply 로그에 skip insert stmt because of cast error.(xid: <xid>) 형태의 경고로 남는다. UPDATE, DELETE도 같은 형식으로 남는다.

  • DISCARD_FILE_YN=Y이면 discard 파일에 cast error discarded와 함께 해당 DML의 xid, seqno, tsn, obj_id가 기록된다. SQL 문은 기록되지 않는다.

DDL DISCARD

주의

단, TABLE 관련 DDL은 해당 기능을 사용하더라도 실패하는 경우 생략할 수 없다.

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

Conflict

데이터 충돌 발생 시, 처리방안에 대해 확인한다.

Data Conflict Rule (DCR)

MAP Rule에서 소개한 Data Conflict Rule의 시나리오들을 정리한다. 옵션을 설정하는 방법은 해당 문서를 참고한다.

DCR의 제약사항

Data Conflict를 확인하려면 Row를 특정할 수 있어야 한다. ProSync에서는 이에 대한 기준을 Primary key로 두고 있다. Primary key 로 인해 충돌이 발생할 경우, Source Database, Target Database, Column Min(Max) 기준으로 데이터 Conflict에 대한 처리를 결정한다.

ProSync는 where절에 lob column은 확인하지 않으므로, 비교 시 해당 column의 데이터가 다르더라도 다른 column 값이 동일하다면 성공적으로 dml을 수행한다.

DCR - MIN/MAX 설정 후 동일한 값으로 dml 수행 시, 비교 로직에서 충돌을 유발하지 않으므로 양측 노드에서 정상 dml을 수행한다.

시나리오

Resolve By Source

1. Insert

Insert문에서 충돌이 발생한다는 것은, 이미 데이터가 존재한다는 의미이다. 따라서 존재하는 데이터를 모두 Source Database 기준으로 맞춰주어야 한다.

Insert문을 Update로 변경하여 Conflict를 해소해준다.

2. Update

Update에서의 데이터 충돌은 원하는 Row가 없다는 의미이다.

Update문을 Insert로 변경하여 Conflict를 해소해준다.

3. Delete

Delete에서의 데이터 충돌 또한 마찬가지로 Row가 없다는 의미가 된다.

Delete에 대한 추가적인 처리가 없이 넘어가면 된다.

Resolve By Target

1. Insert

Insert문의 충돌은 이미 데이터가 있을 때 발생하는데, Target Database 기준으로 맞춰야 하므로, 별도의 작업 없이 해당 처리를 건너뛴다.

2. Update

Row가 없는 상황이 맞다고 판단하기 때문에 별도의 작업 없이 해당 처리를 건너뛴다.

3. Delete

Row가 없는 상황이 맞다고 판단하기 때문에 별도의 작업 없이 해당 처리를 건너뛴다.

Resolve By Min/Max

위 두 경우에 대한 조합으로 볼 수 있다. 상황에 따라 Source 기준 또는 Target 기준에 맞춰 수행하는 시나리오다. 기준이 되는 것이 Database 단위가 아닌 Column 내 데이터의 대소 비교로 이루어진다는 점이 다르고, 이에 따라 충돌 처리 동작은 위의 Source / Target과 동일하게 작동한다.

주의

Data Conflict Rule(DCR) 관련

Data Conflict Rule(DCR) 옵션을 사용할 경우 USE_PK_FOR_WHERE 옵션은 무시된다. 동기화의 논리 구조상 Conflict를 찾는 것이 우선이기 때문에 ProSync에선 두 옵션 간에 이와 같은 우선순위를 둔다.