테이블 처리 준비
다음 테이블 속성은 Oracle GoldenGate 환경에서 처리해야 합니다.
트리거 비활성화 및 제약 조건 연쇄화
트리거를 사용 안함으로 설정하거나, 제약 조건을 캐스케이드하거나, 대상 Sybase 테이블에서 업데이트 제약 조건을 캐스케이드하거나, Oracle GoldenGate 데이터베이스 사용자가 변경한 사항을 무시하도록 변경합니다. Oracle GoldenGate는 트리거 또는 캐스케이드 제약 조건에서 발생하는 DML을 복제합니다. 대상 테이블에서 동일한 트리거 또는 제약 조건이 활성화되면 복제된 버전으로 인해 중복되고 데이터베이스가 오류를 반환합니다. 소스 테이블이 emp_src 및 salary_src이고 대상 테이블이 emp_targ 및 salary_targ인 다음 예를 고려해 보십시오.
-
emp_src에 대해 삭제가 실행됩니다. -
삭제를
salary_src로 캐스케이드합니다. -
Oracle GoldenGate는 두 삭제를 대상으로 전송합니다.
-
상위 삭제가 먼저 도착하고
emp_targ에 적용됩니다. -
상위 삭제는 삭제를
salary_targ로 캐스케이드합니다. -
salary_src에서 계단식 삭제가salary_targ에 적용됩니다. -
행은 5단계에서 이미 삭제되었으므로 찾을 수 없습니다.
데이터베이스 세션 시작 시 대상 트리거를 비활성화하도록 Replicat를 구성하려면 다음 단계를 수행하십시오.
-
Replicat 사용자에게 복제 역할을 지정합니다.
-
Replicat 매개변수 파일의 루트 레벨에 다음 매개변수 문을 추가합니다.
SQLEXEC "set triggers off"
행 식별자 할당
Oracle GoldenGate에는 복제된 업데이트 및 삭제를 위한 올바른 대상 행을 찾기 위해 소스 및 대상 테이블에서 특정 형식의 고유한 행 식별자가 필요합니다.
키가 없는 테이블의 행 변경 제한
대상 테이블에 기본 키나 고유 키가 없으면 중복 행이 존재할 수 있습니다. Oracle GoldenGate가 대상 테이블에서 너무 많은 행을 업데이트하거나 삭제할 수 있으므로 오류 메시지 없이 소스 및 대상 데이터가 동기화에서 벗어나 경보를 보낼 수 있습니다. 업데이트되는 행 수를 제한하려면 Replicat 매개변수 파일에서 DBOPTIONS 매개변수를 LIMITROWS 옵션과 함께 사용합니다. LIMITROWS는 하나의 행만 처리되므로 대상 시스템에서 Oracle GoldenGate의 성능을 향상시킬 수 있습니다.
암호화된 데이터 복제
Oracle GoldenGate는 시스템 암호화 비밀번호로 암호화되지만 사용자 정의 비밀번호로 암호화되는 열은 지원하지 않는 열을 지원합니다. 다음 Oracle GoldenGate 제한 사항에 대해 데이터를 캡처할 테이블을 확인합니다.
-
암호화된 열을 포함하는 테이블에는 기본 또는 고유 키가 있어야 합니다.
-
암호화를 사용하는 열은 기본 키의 일부가 될 수 없습니다.
암호화된 열은 데이터 파일 및 로그에서 암호화되므로 데이터베이스에서 일반 텍스트 값을 인출하도록 Extract를 구성해야 합니다. 이 인출을 트리거하려면 Extract TABLE 매개변수의 FETCHCOLS 및 FETCHMODCOLS[EXCEPT] 옵션을 사용합니다. FETCHCOLS는 로그에 없는 값을 강제로 인출하고, FETCHMODCOLS 또는 FETCHMODCOLS[EXCEPT]는 로그에 있는 값을 강제로 인출합니다. 이러한 파라미터를 함께 사용하면 암호화된 열이 항상 데이터베이스에서 패치(fetch)됩니다.
다음은 암호화를 지원하도록 Extract를 구성하는 방법의 예입니다. 이 예에서 암호화된 열은 cardnum입니다.
TABLE ab.payments, FETCHCOLS (cardnum), FETCHMODCOLS (cardnum);
트랜잭션 로그 준비
DML 작업을 캡처하기 위해 Oracle GoldenGate는 온라인 로그를 읽습니다. Oracle GoldenGate 처리의 연속성 및 무결성을 보장하려면 다음 절의 지침에 따라 로그를 구성해야 합니다.
보조 자르기 지점 초기화
Oracle GoldenGate 추출 프로세스를 실행하기 전에 소스 시스템에서 보조 로그 자르기 지점을 설정합니다. Extract는 2차 자르기 지점을 사용하여 계속 처리할 데이터를 식별합니다.
보조 자르기 지점을 초기화하려면 sa_role 권한을 가진 사용자로 데이터베이스에 로그온한 후 다음 명령을 실행합니다.
dbcc settrunc( 'ltm', valid )
기본적으로 Extract는 2차 자르기 지점이 설정된 후 이를 관리합니다. 필요 이상으로 Extract가 정지되도록 허용하지 마십시오. 그렇지 않으면 로그가 결국 채워질 수 있고 데이터베이스가 정지됩니다. 이 문제를 해결하는 유일한 방법은 보조 자르기 지점을 사용 안함으로 설정하고 Oracle GoldenGate 외부에서 관리한 다음 트랜잭션 로그를 비우는 것입니다. Extract에서 아직 처리되지 않은 데이터는 손실되며 소스 및 대상 데이터를 재동기화해야 합니다.
보조 자르기 지점을 관리하는 방법을 제어하려면 TRANLOGOPTIONS 매개변수를 사용합니다. 자세한 내용은 Windows 및 UNIX용 Oracle GoldenGate 참조를 참조하십시오.
로그 크기 조정 및 유지
소스 시스템에서 충분한 로그 데이터를 유지하여 Extract가 정지한 후 해당 체크포인트에서 다시 시작하거나 계획되지 않은 운용중단이 발생할 수 있도록 합니다. Extract는 가장 오래된 커밋되지 않은 작업 단위의 시작과 그 이후의 모든 로그를 포함하는 로그에 액세스할 수 있어야 합니다. Extract 체크포인트 위치를 확인하려면 INFO EXTRACT 명령을 사용합니다. INFO EXTRACT에 대한 자세한 내용은 Windows 및 UNIX용 Oracle GoldenGate 참조를 참조하십시오.
처리 중 Extract에 필요한 데이터가 온라인 또는 백업 로그에 보존되지 않으면 다음 해결 조치 중 하나가 필요할 수 있습니다.
-
로그 데이터를 사용할 수 있는 이후 시점부터 캡처하도록 Extract를 변경하고 대상에서 가능한 데이터 손실을 수락해야 할 수 있습니다. 이 작업은
ALTER EXTRACT명령을 사용하여 수행할 수 있습니다. -
소스 및 대상 테이블을 재동기화한 다음 Oracle GoldenGate 환경을 다시 시작해야 할 수 있습니다.
소스 시스템의 새 백업에서 이전 아카이브 파일을 겹쳐쓰도록 하는 백업 또는 아카이브 옵션을 사용하지 않도록 합니다. 새 백업은 이전 백업과 다른 이름을 가진 별도의 파일이어야 합니다. 따라서 Extract가 특정 로그를 찾는 경우에도 해당 로그가 존재하며, 지원 사례에 필요한 경우 데이터를 사용할 수 있도록 보장합니다.
트랜잭션 로깅 사용
ADD TRANDATA 명령을 사용하여 복제할 각 소스 테이블을 표시합니다. 이 명령은 Sybase sp_setreptable 및 sp_setrepcol 시스템 절차를 사용합니다. ADD TRANDATA는 데이터베이스 인터페이스를 통해 이러한 프로시저를 사용하는 대신 테이블을 표시하는 권장 방법이지만, 소유자나 시스템 관리자가 필요한 경우 테이블을 사용할 수 있습니다. 자세한 내용은 Sybase 설명서를 참조하십시오.
ADD TRANDATA를 사용하여 복제할 테이블을 표시하려면 다음과 같이 하십시오.
표시할 각 테이블에 대해 ADD TRANDATA 명령을 실행합니다. ADD TRANDATA 명령 구문은 다음과 같습니다.
ADD TRANDATA SCHEMA.TABLE LOBSNEVER | LOBSALWAYS | LOBSALWAYSNOINDEX | LOBSIFCHANGED
LOBSNEVER | LOBSALWAYS | LOBSALWAYSNOINDEX | LOBSIFCHANGED는 LOB 데이터가 전달되지 않는지 여부, 변경된 경우에만 전달되는지(기본값) 또는 항상 전달되는지 여부를 제어합니다. LOB 옵션이 지정되지 않은 경우 LOBSIFCHANGED가 기본값입니다. ADD TRANDATA 명령은 현재 테이블에 대해 설정된 LOB 복제 설정을 겹쳐씁니다.
주: 일부 ADD TRANDATA 옵션은 sp_setrepcol의 ALWAYS_REPLICATE 옵션을 사용으로 설정합니다. LOB 열에 NULL 값이 포함된 경우 테이블의 다른 열이 업데이트되고(LOB는 업데이트되지 않음), ALWAYS_REPLICATE가 사용으로 설정되어 있어도 해당 LOB이 캡처되지 않습니다.