Oracle CDC 인스턴스는 대상 SQL Server 인스턴스에서 동일한 이름으로 SQL Server 데이터베이스와 연결됩니다. 이 데이터베이스를 Oracle CDC 데이터베이스(또는 CDC 데이터베이스)라고 합니다.
CDC 데이터베이스는 Oracle CDC Designer 콘솔을 사용하여 만들어지고 구성되며 다음 요소가 포함됩니다.
cdcSQL Server CDC에 데이터베이스를 사용하도록 설정하여 만든 스키마입니다.Oracle CDC Instance에서 사용하는 cdc.xdbcdc_xxxx 테이블 집합입니다.
Tuphe Source Oracle 데이터베이스에서 캡처된 테이블의 정의가 있는 빈 미러 테이블 집합입니다.
SQL Server CDC 메커니즘에 의해 생성되고 Oracle이 아닌 일반 SQL Server CDC에서 사용되는 것과 동일한 변경 테이블 및 변경 액세스 함수 집합입니다.
스키마는 처음에 dbowner 고정 데이터베이스 역할 멤버에게만 접근할 수 있습니다. 변경 테이블 및 변경 함수에 대한 액세스는 SQL Server CDC와 동일한 보안 모델에 의해 결정됩니다. 보안 모델에 대한 자세한 내용은 보안 모델을 참조하세요.
CDC Database 만들기
대부분의 경우 CDC 데이터베이스는 CDC Designer 콘솔을 사용하여 만들어지지만 CDC Designer 콘솔을 사용하여 생성된 CDC 배포 스크립트를 사용하여 만들 수도 있습니다. 필요한 경우 SQL Server 시스템 관리자는 스토리지, 보안 또는 가용성과 같은 항목에 대해 데이터베이스 설정을 변경할 수 있습니다.
CDC Designer 콘솔을 사용하여 데이터베이스 테이블 및 필요한 스크립트를 만드는 방법에 대한 자세한 내용은 새 인스턴스 마법사 사용을 참조하세요.
CDC Database 사용자 역할
CDC Database를 만들고 CDC에 사용하도록 설정하면 cdc_service 이라는 데이터베이스 사용자가 CDC 데이터베이스에 생성되고 Oracle CDC Service가 구성된 SQL Server 로그인과 연결됩니다. 이 사용자는 db_datareader, db_datawriter 및 db_ddladmin 데이터베이스 역할의 멤버로 만들어집니다. SQL Server 로그인도 사용자와 dbo 연결된 경우 cdc_service 만들어지지 않습니다.
이 역할 할당을 사용하면 Oracle CDC Service가 캡처된 데이터와 제어 정보를 사용하여 스키마 아래의 cdc 테이블을 업데이트할 수 있습니다.
CDC 데이터베이스가 만들어지고 CDC 원본 Oracle 테이블이 설정되면 CDC 데이터베이스 소유자는 미러 테이블의 SELECT 권한을 부여하고 SQL Server CDC 게이팅 역할을 정의하여 변경 데이터에 액세스하는 사용자를 제어할 수 있습니다.
미러 테이블
캡처된 각 테이블, <스키마 이름>.<테이블 이름>과 같은 형식으로 Oracle 원본 데이터베이스의 동일한 스키마와 테이블 이름을 가진 비어 있는 테이블이 CDC Database에 생성됩니다. SQL Server의 스키마가 SQL Server CDC용으로 예약되어 있으므로 cdc 스키마 이름을 cdc 가진 Oracle 원본 테이블(대/소문자 구분 안 함)을 캡처할 수 없습니다.
미러 테이블은 비어 있습니다. 데이터가 저장되지 않습니다. Oracle CDC 인스턴스에서 사용하는 표준 SQL Server CDC 인프라를 사용하도록 설정하는 데 사용됩니다. 데이터가 미러 테이블에 삽입되거나 업데이트되지 않도록 하려면 PUBLIC에 대해 모든 UPDATE, DELETE 및 INSERT 작업이 거부됩니다. 이렇게 하면 수정할 수 없습니다.
데이터 변경에 대한 액세스
캡처 인스턴스와 연결된 변경 데이터에 액세스하는 데 사용되는 SQL Server 보안 모델 때문에 사용자는 연결된 미러 테이블의 캡처된 모든 열에 대한 액세스 권한을 부여 select 해야 합니다(원래 Oracle 테이블에 대한 액세스 권한은 SQL Server의 변경 테이블에 대한 액세스를 제공하지 않음). SQL Server 보안 모델에 대한 자세한 내용은 보안 모델을 참조하세요.
또한 캡처 인스턴스를 만들 때 게이팅 역할을 지정하는 경우 호출자도 지정된 게이팅 역할의 멤버여야 합니다. 메타데이터에 액세스하기 위한 다른 일반적인 변경 데이터 캡처 함수는 공용 역할을 통해 모든 데이터베이스 사용자가 액세스할 수 있지만, 반환된 메타데이터에 대한 액세스는 일반적으로 기본 원본 테이블에 대한 선택 액세스를 사용하고 정의된 게이팅 역할의 멤버 자격으로 제어됩니다.
캡처 인스턴스를 만들 때 SQL Server CDC 구성 요소에서 생성된 특수 테이블 기반 함수를 호출하여 변경 데이터를 읽을 수 있습니다. 이 함수에 대한 자세한 내용은 변경 데이터 캡처 함수(Transact-SQL)를 참조하세요.
Integration Services CDC 원본 구성 요소를 통해 CDC 데이터에 액세스하는 경우 동일한 규칙이 적용됩니다.
CDC 데이터베이스 테이블
이 섹션에서는 CDC 데이터베이스의 다음 테이블에 대해 설명합니다.
테이블 변경(_CT)
변경 테이블은 미러 테이블에서 만들어집니다. 여기에는 Oracle 데이터베이스에서 캡처된 변경 데이터가 포함됩니다. 테이블 이름은 다음 규칙에 따라 지정됩니다.
[cdc]. [<capture-instance>_CT]
처음에 테이블에 <schema-name>.<table-name>캡처를 사용하도록 설정하면 기본 캡처 인스턴스 이름은 .입니다 <schema-name>_<table-name>. 예를 들어 Oracle HR.EMPLOYEES 테이블의 기본 캡처 인스턴스 이름은 HR_EMPLOYEES이며, 연결된 변경 테이블은 [cdc]입니다. [HR_EMPLOYEES_CT].
캡처 테이블은 Oracle CDC 인스턴스에 의해 작성됩니다. 캡처 인스턴스를 만들 때 SQL Server에서 생성된 특수 테이블 반환 함수를 사용하여 읽습니다. 예: fn_cdc_get_all_changes_HR_EMPLOYEES. 이러한 CDC 함수에 대한 자세한 내용은 변경 데이터 캡처 함수(Transact-SQL)를 참조하세요.
cdc.lsn_time_mapping
[cdc].[ lsn_time_mapping] 테이블은 SQL Server CDC 구성 요소에 의해 생성됩니다. Oracle CDC의 경우의 사용은 일반적인 용도와 다릅니다.
Oracle CDC의 경우 이 테이블에 저장된 LSN 값은 변경과 관련된 SCN(Oracle 시스템 변경 번호) 값을 기반으로 합니다. LSN 값의 처음 6바이트는 원래 Oracle SCN 번호입니다.
또한 Oracle CDC를 사용하는 경우 시간 열(tran_begin_time 및 tran_end_time)은 일반 SQL Server CDC와 마찬가지로 현지 시간이 아닌 변경의 UTC 시간을 저장합니다. 이렇게 하면 일광 절약 시간 변경이 lsn_time_mapping 저장된 데이터에 영향을 주지 않습니다.
cdc.xdbcdc_config
이 테이블에는 Oracle CDC 인스턴스에 대한 구성 데이터가 포함되어 있습니다. CDC Designer 콘솔을 사용하여 업데이트됩니다. 이 테이블에는 행이 하나만 있습니다.
다음 표에서는 cdc.xdbcdc_config 테이블 열에 대해 설명합니다.
| 항목 | 설명 |
|---|---|
| 버전 | 이렇게 하면 CDC 인스턴스 구성의 버전을 추적할 수 있습니다. 테이블이 업데이트되고 새 캡처 인스턴스가 추가되거나 기존 캡처 인스턴스가 제거될 때마다 업데이트됩니다. |
| 연결 문자열 | Oracle 연결 문자열입니다. 기본 예는 다음과 같습니다.<server>:<port>/<instance> (예: erp.contoso.com:1521/orcl).연결 문자열은 Oracle Net Connect 설명자를 지정할 수도 있습니다. 예를 들면 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp) (HOST=erp.contoso.com) (PORT=1521)) (CONNECT_DATA=(SERVICE_NAME=orcl)))다음과 같습니다.디렉터리 서버 또는 tnsnames를 사용하는 경우 연결 문자열은 연결의 이름이 될 수 있습니다. Oracle 연결 문자열에 대한 자세한 내용은 Oracle CDC Service에서 사용하는 Oracle Instant Client의 Oracle 데이터베이스 연결 문자열에 대한 자세한 내용을 참조 https://go.microsoft.com/fwlink/?LinkId=231153 하세요. |
| 윈도우 인증 사용 | 다음과 같은 값을 가질 수 있는 불린 값입니다. 0: 인증을 위해 Oracle 사용자 이름 및 암호가 제공됩니다(기본값). 1: Windows 인증은 Oracle 데이터베이스에 연결하는 데 사용됩니다. Oracle 데이터베이스가 Windows 인증을 사용하도록 구성된 경우에만 이 옵션을 사용할 수 있습니다. |
| 사용자 이름 | 로그 마이닝 Oracle 데이터베이스 사용자의 이름입니다. 이는 use_windows_authentication = 0인 경우에만 필수입니다. |
| 암호 | 로그 마이닝 Oracle 데이터베이스 사용자의 암호입니다. 이는 use_windows_authentication = 0인 경우에만 필수입니다. |
| 트랜잭션_스테이징_타임아웃 | 커밋되지 않은 Oracle 트랜잭션이 메모리에 유지된 후 cdc.xdbcdc_staged_transactions 테이블에 기록되는 시간(초)입니다. 기본값은 120초입니다. |
| 메모리 제한 | 메모리의 데이터 캐싱에 사용할 수 있는 메모리 양(Mb)에 대한 제한입니다. 설정이 낮을수록 cdc.xdbcdc_staged_transactions 테이블에 더 많은 트랜잭션이 기록됩니다. 기본값은 50Mb입니다. |
| 옵션 | 이름[=value][; ] 형식의 옵션 목록 - 보조 옵션(예: 추적, 튜닝)을 지정하는 데 사용됩니다. 사용 가능한 옵션에 대한 설명은 아래 표를 참조하세요. |
다음 표에서는 사용 가능한 옵션에 대해 설명합니다.
| 이름 | 기본값 | 민 | 맥스 | 정적인 | 설명 |
|---|---|---|---|---|---|
| 흔적 | 거짓 | - | - | 거짓 | 사용 가능한 값은 다음과 같습니다. 참 거짓 에 off |
| cdc_update_state_interval (CDC 상태 업데이트 간격) | 10 | 1 | 백이십 | 거짓 | 트랜잭션에 할당된 메모리 청크의 크기(KB)입니다(트랜잭션은 둘 이상의 청크를 할당할 수 있습니다). cdc.xdbcdc_config 테이블의 memory_limit 열을 참조하세요. |
| target_max_batched_transactions | 100 | 1 | 1000 | 진실 | SQL Server CT 테이블 업데이트에서 하나의 트랜잭션으로 처리할 수 있는 Oracle 트랜잭션의 최대 수입니다. |
| target_idle_lsn_update_interval | 10 | 0 | 1 | 거짓 | 캡처된 테이블에 활동이 없는 경우 lsn_time_mapping 테이블을 업데이트하기 위한 간격(초)입니다. |
| 추적 보존 기간 | 24 | 1 | 24*31 | 거짓 | 추적 테이블에 메시지를 보관하는 데 걸리는 시간(시간)입니다. |
| sql_재연결_간격 | 2 | 2 | 3600 | 거짓 | SQL Server에 다시 연결하기 전에 대기할 시간(초)입니다. 이 간격은 SQL Server 클라이언트의 연결 시간 제한 외에 사용됩니다. |
| SQL 재연결 제한 | -1 | -1 | -1 | 거짓 | SQL Server 다시 연결의 최대 수입니다. 기본 -1 프로세스가 중지될 때까지 다시 연결하려고 시도한다는 것을 의미합니다. |
| cdc_restart_limit | 6 | -1 | 3600 | 거짓 | 대부분의 경우 CDC 서비스는 비정상적으로 종료된 CDC 인스턴스를 자동으로 다시 시작합니다. 이 속성은 서비스가 인스턴스를 다시 시작하기 위해 중지하는 시간당 오류 수를 정의합니다. -1 값은 인스턴스를 항상 다시 시작해야 했음을 의미합니다. 서비스는 구성 테이블을 업데이트한 후 인스턴스를 다시 시작하도록 반환합니다. |
| cdc 메모리 보고서 | 0 | 0 | 1000 | 거짓 | 매개 변수 값이 변경된 경우 CDC 인스턴스는 추적 테이블에 해당 메모리 보고서를 출력합니다. |
| 타겟_명령_타임아웃 | 600 | 1 | 3600 | 거짓 | SQL Server 작업 시 명령 시간 초과. |
| 소스 문자 세트 | - | - | - | 진실 | Oracle 데이터베이스 코드 페이지 대신 사용할 특정 Oracle 인코딩으로 설정할 수 있습니다. 이는 문자 데이터가 사용하는 실제 인코딩이 Oracle 데이터베이스 코드 페이지에서 표현한 것과 다를 때 사용할 수 있습니다. |
| 소스 오류 재시도 간격 | 30 | 1 | 3600 | 거짓 | 연결 오류 또는 시스템 테이블 간의 일시적인 동기화 부족과 같은 여러 오류에 대해 다시 시도하기 전에 사용됩니다. |
| source_prefetch_size (소스 프리페치 크기) | 100 | 1 | 1만 | 진실 | 프리페치 일괄 처리의 크기입니다. |
| source_max_tables_in_query | 100 | 1 | 1만 | 진실 | 테이블 필터링 없이 Oracle 로그를 읽기로 전환하기 전에 WHERE 절의 최대 테이블 수입니다. |
| source_read_retry_interval | 2 | 1 | 3600 | 거짓 | EOF에서 Oracle 트랜잭션 로그를 다시 읽기 전에 원본이 대기하는 시간입니다. |
| 소스_재연결_간격 | 30 | 1 | 3600 | 거짓 | 원본 데이터베이스에 다시 연결하기 전에 대기하는 시간(초)입니다. |
| 소스_재연결_제한 | -1 | -1 | 거짓 | 원본 데이터베이스 다시 연결의 최대 수입니다. 기본 -1 프로세스가 중지될 때까지 다시 연결하려고 시도한다는 것을 의미합니다. | |
| 소스 명령 시간 초과 | 30 | 1 | 3600 | 거짓 | Oracle을 사용하는 연결 시간 제한입니다. |
| 소스 연결 시간 초과 | 30 | 1 | 3600 | 거짓 | SQL Server 작업 중 연결 시간 초과입니다. |
| trace_data_errors | 진실 | - | - | 거짓 | 부울. True 는 데이터 변환 및 잘림 오류를 기록하도록 나타냅니다. |
| CDC_stop_on_breaking_schema_changes | 거짓 | - | - | 거짓 | 불리언.
True는 중대한 스키마 변경이 감지될 때 중지하도록 나타냅니다. False 는 미러 테이블을 삭제하고 인스턴스를 캡처하도록 나타냅니다. |
| 소스_오라클_홈 | - | - | 거짓 | CDC 인스턴스가 Oracle에 연결하는 데 사용할 특정 Oracle 홈 경로 또는 Oracle 홈 이름으로 설정할 수 있습니다. |
cdc.xdbcdc_state
이 테이블에는 Oracle CDC Instance의 지속형 상태에 대한 정보가 포함되어 있습니다. 캡처 상태는 복구 및 장애 조치 시나리오 및 상태 모니터링에 사용됩니다.
다음 표에서는 cdc.xdbcdc_state 테이블 열에 대해 설명합니다.
| 항목 | 설명 |
|---|---|
| 상태 | 현재 Oracle CDC 인스턴스의 현재 상태 코드입니다. 상태는 CDC의 현재 상태를 설명합니다. |
| 하위_상태 | 현재 상태에 대한 추가 정보를 제공하는 두 번째 수준 상태입니다. |
| 활동적 | 부울 값은 다음과 같을 수 있습니다: 0: Oracle CDC 인스턴스 프로세스가 활성화되지 않았습니다. 1: Oracle CDC 인스턴스 프로세스가 활성화되어 있습니다. |
| 오류 | 다음이 될 수 있는 부울 값입니다. 0: Oracle CDC 인스턴스 프로세스가 오류 상태가 아닙니다. 1: Oracle CDC 인스턴스가 오류 상태입니다. |
| 상태_메시지 | 오류 또는 상태에 대한 설명을 제공하는 문자열입니다. |
| 시간표시 | 캡처 상태가 마지막으로 업데이트된 시간(UTC)이 있는 타임스탬프입니다. |
| 엑티브 캡처 노드 | 현재 Oracle CDC Service 및 Oracle CDC 인스턴스(Oracle 트랜잭션 로그를 처리하는)를 실행하는 호스트의 이름(호스트는 클러스터의 노드일 수 있습니다)입니다. |
| 마지막 거래 타임스탬프 | 변경 테이블에 기록된 마지막 트랜잭션의 시간(UTC)이 포함된 타임스탬프입니다. |
| 최종 변경 타임스탬프 | 원본 Oracle 트랜잭션 로그에서 가장 최근 변경 레코드를 읽은 시간(UTC)이 있는 타임스탬프입니다. 이 타임스탬프는 CDC 프로세스의 현재 대기 시간을 식별하는 데 도움이 됩니다. |
| 트랜잭션_로그_헤드_중국 | Oracle 트랜잭션 로그에서 읽은 가장 최근의 CN(변경 번호)입니다. |
| 거래_로그_끝부분_cn | Oracle CDC 인스턴스가 다시 시작 또는 복구 시 위치가 변경되는 Oracle 트랜잭션 로그의 CN(변경 번호)입니다. |
| 현재_cn | 원본 데이터베이스에 있는 것으로 알려진 가장 최근의 CN(변경 번호)입니다. |
| 소프트웨어 버전 | Oracle CDC Service의 내부 버전입니다. |
| 완료된_거래 | CDC가 마지막으로 재설정된 이후 처리된 트랜잭션 수입니다. |
| 작성된 변경 사항 | SQL Server 변경 테이블에 기록된 변경 레코드 수입니다. |
| 변경사항_읽기 | 원본 Oracle 트랜잭션 로그에서 읽은 변경 레코드 수입니다. |
| 단계별 거래 | cdc.xdbcdc_staged_transactions 테이블에 스테이징된 현재 활성 트랜잭션의 수입니다. |
cdc.xdbcdc_trace
이 표에는 CDC 인스턴스의 작업에 대한 정보가 포함되어 있습니다. 이 테이블에 저장된 정보에는 오류 레코드, 주목할 만한 상태 변경 및 추적 레코드가 포함됩니다. cdc.xcbcdc_trace 테이블을 사용할 수 없는 경우 정보를 사용할 수 있도록 Windows 이벤트 로그에도 오류 정보가 기록됩니다.
다음 표에서는 cdc.xdbcdc_trace 테이블 열에 대해 설명합니다.
| 항목 | 설명 |
|---|---|
| 시간표시 | 추적 레코드가 기록된 정확한 UTC 타임스탬프입니다. |
| 유형 | 다음 값 중 하나를 포함합니다. 오류 정보 추적 |
| 노드 | 레코드가 기록된 노드의 이름입니다. |
| 상태 | 상태 테이블에 사용되는 상태 코드입니다. |
| 하위_상태 | 상태 테이블에서 사용하는 하위 상태 코드입니다. |
| 상태_메시지 | 상태 테이블에서 사용하는 상태 메시지입니다. |
| 데이터 | 오류 또는 추적 레코드에 페이로드(예: 손상된 로그 레코드)가 포함된 경우의 추가 데이터입니다. |
cdc.xdbcdc_staged_transactions
이 표에서는 트랜잭션 커밋 또는 롤백 이벤트가 캡처될 때까지 대규모 또는 장기 실행 트랜잭션에 대한 변경 레코드를 저장합니다. Oracle CDC Service는 트랜잭션 커밋 시간 및 각 트랜잭션에 대한 시간순으로 캡처된 로그 레코드를 주문합니다. 동일한 트랜잭션에 대한 로그 레코드는 트랜잭션이 종료될 때까지 메모리에 저장되고 대상 변경 테이블에 기록되거나 삭제됩니다(롤백의 경우). 사용 가능한 메모리 양이 제한되어 있으므로 트랜잭션이 완료될 때까지 대용량 트랜잭션이 cdc.xdbcdc_staged_transactions 테이블에 기록됩니다. 트랜잭션은 오랜 시간 동안 실행되면 준비 테이블에도 기록됩니다. 따라서 Oracle CDC 인스턴스를 다시 시작하면 Oracle 트랜잭션 로그에서 이전 변경 내용을 다시 읽을 필요가 없습니다.
다음 표에서는 cdc.xdbcdc_staged_transactions 테이블 열에 대해 설명합니다.
| 항목 | 설명 |
|---|---|
| transaction_id | 준비 중인 트랜잭션의 고유 트랜잭션 식별자입니다. |
| 시퀀스 번호 | 현재 트랜잭션의 xcbcdc_staged_transactions 행 수입니다(0부터 시작). |
| data_start_cn | 이 행에 있는 데이터의 첫 번째 변경 내용에 대한 CN(변경 번호)입니다. |
| 데이터_끝_cn | 이 행에 있는 데이터의 마지막 변경 내용에 대한 CN(변경 번호)입니다. |
| 데이터 | BLOB 형식의 트랜잭션에 대한 스테이징된 변경 내용입니다. |