테이블 및 DDL의 패치(fetch) 간 상호 작용

Oracle GoldenGate는 리두 스트림에서 수정된 행을 식별한 다음 변경된 열을 인출할 기본 테이블을 질의하여 일부 데이터 유형을 지원합니다. 예를 들어, 리두 로그에서 수정된 행과 LOB 열을 식별한 다음 기본 테이블에서 행에 대한 LOB 열 값을 query하면 LOB에 대한 부분 갱신이 지원됩니다. UDT를 지원하기 위해 유사한 기술이 사용됩니다.

주: 고유 객체 지원을 사용하지 않을 경우 추출에는 UDT에 대한 인출만 필요합니다.

이러한 패치 기반 지원은 트랜잭션이 커밋된 SCN(시스템 변경 번호)을 기반으로 데이터베이스에 Flashback 질의를 실행하여 구현됩니다. Flashback Query 기능에는 몇 가지 제한 사항이 있습니다. 특정 DDL 작업은 이러한 DDL 이전에 데이터를 가져오기 위한 Flashback Query가 실패하는 장벽 역할을 합니다. 이러한 DDL의 예는 ALTER TABLE MODIFY COLUMN 및 ALTER TABLE DROP COLUMN입니다.

따라서 Extract 캡처 지연이 있는 경우 간섭하는 DDL로 인해 DDL이 실패하기 전에 데이터에 대한 패치(fetch) 요청이 발생할 수 있습니다. 이 경우 Extract가 폴백되어 수정된 열에 대한 데이터의 현재 스냅샷을 인출합니다. 이 접근 방식에는 몇 가지 제한 사항이 있습니다. 먼저, DDL이 Extract가 패치(fetch)해야 하는 열을 수정했을 수 있습니다. 예를 들어, 간섭하는 DDL이 캡처되는 UDT에 새 속성을 추가했다고 가정해 보겠습니다. 둘째, DDL이 Extract가 논리적 행 식별자로 사용하는 열 중 하나를 수정했을 수 있습니다. 셋째, Extract가 데이터를 인출하기 전에 테이블 이름이 바뀌었을 수 있습니다.

이와 같은 패치(fetch) 관련 불일치를 방지하려면 열을 수정하는 동안 다음 예방 조치를 취하십시오.

  1. 테이블에 대한 모든 DML을 일시 중지합니다.

  2. Extract가 남아 있는 모든 리두 캡처를 완료할 때까지 기다린 후 Replicat가 트레일에서 캡처된 데이터 처리를 완료할 때까지 기다립니다. Replicat가 완료되었는지 확인하려면 처리할 데이터가 더 이상 없다는 메시지가 표시될 때까지 다음 명령을 실행합니다.

    INFO REPLICAT *group*
  3. 소스에서 DDL을 실행합니다.

  4. 소스 DML 작업을 재개합니다.