Where Clause
Redo Log는 물리적인 위치에 대한 변경분이 남는다. RDBMS (주로 Oracle, Tibero) 에서는 row 데이터가 ROW_ID
라는 고유의 값을 가지게 되는데, 이 ID에는 데이터 파일의 위치, 파일 내 데이터 블록의 위치, 블록 내 row의 위치 에 대한 정보가 저장되어있다.
ProSync는 이 물리적으로 정해진 ROW_ID
만 가지고선 Target Database에서 정확하게 어떤 row인지 판별할 수가 없다. 왜냐하면 데이터 파일도 다를 것이고, 블록 위치나 row 위치 정보도 모두 다르기 때문에 ROW_ID
로는 서로 다른 Database의 row를 매칭 시키기가 어렵다.
따라서 SUPPLEMENTAL_LOGGING
옵션 등을 통해 row 데이터의 추가적인 정보를 Redo Log상에 함께 남기게 된다. 예를 들면, 사용자가 Where Clause에 1개의 Column정보만 넣었다고 하더라도, Redo Log에는 해당 Row 내에 있는 모든 Column 정보가 다 남도록 해준다.
Target Database와 Apply 프로세스는 이 정보를 가지고 쿼리를 재구축한다. 다만 이렇게 되면, Primary key
를 가지고 있는 테이블 입장에선 불필요한 다른 컬럼 정보들을 Where Clause
에 넣어주는 경우가 생긴다. Database의 플랜 별로 최적화되어 잘 처리될 수도 있지만, 불필요한 상황 자체를 방어하기 위해 ProSync에선 Primary key
만 사용할지에 대한 여부를 파라미터로 관리한다.
Parameter 관련
USE_PK_FOR_WHERE
이 파라미터를 사용하면Primary key
가 있는 테이블에 대한Update
나Delete
시에Where Clause
에는Primary key
만 넣게 된다.
주의
Data Conflict Rule(DCR) 관련
Data Conflict Rule (DCR) 옵션을 사용할 경우 USE_PK_FOR_WHERE
옵션은 무시된다. 동기화의 논리 구조상 Conflict
를 찾는 것이 우선이기 때문에 ProSync에선 두 옵션 간에 이와 같은 우선순위를 둔다.
Last updated