다음을 통해 공유


오류 처리

Oracle CDC 인스턴스는 단일 Oracle 원본 데이터베이스(Oracle RAC 클러스터는 단일 데이터베이스로 간주됨)의 변경 내용을 마이닝하고 커밋된 변경 내용을 작성하여 대상 SQL Server 인스턴스의 CDC 데이터베이스에 있는 테이블을 변경합니다.

CDC 인스턴스는 cdc.xdbcdc_state이라는 시스템 테이블에서 상태를 유지 관리합니다. 이 테이블은 언제든지 쿼리하여 CDC 인스턴스의 상태를 찾을 수 있습니다. cdc.xdbcdc_state 테이블에 대한 자세한 내용은 cdc.xdbcdc_state 참조하세요.

아래 표에서는 xdbcdc_state 테이블의 CDC 인스턴스 상태를 설명합니다.

각 상태에 대해 cdc.xdbcdc_state 테이블의 해당 열에 대해 다음 두 가지 표시가 표시됩니다.

  • 인스턴스가 활성화되어 있지 않습니다(현재 처리 중인 Windows 프로세스가 없음). 활성 열 값이 1이면 이 특정 Oracle CDC 인스턴스를 처리하는 Oracle CDC Service의 하위 프로세서가 실행되고 있습니다.

  • 오류 열 값이 0이면 Oracle CDC 인스턴스가 오류 상태가 아닙니다. 오류 열 값이 1이면 Oracle CDC 인스턴스가 변경 내용을 처리하지 못하게 하는 오류가 있습니다.

    오류 열의 값이 1이고 활성 열 값도 1이면 Oracle CDC 인스턴스에 대해 복구 가능한 오류가 발생합니다. 이 오류는 자동으로 해결될 수 있습니다. 오류 열의 값이 1이고 활성 열의 값이 0인 경우 대부분의 경우 처리를 다시 시작하기 전에 문제를 해결하기 위해 수동 해결 방법이 필요할 수 있습니다.

다음 표에서는 Oracle CDC Instance가 해당 상태 테이블에서 보고할 수 있는 다양한 상태 코드를 설명합니다.

상태 활성 상태 코드 오류 상태 코드 설명
중단됨 0 1 Oracle CDC 인스턴스가 실행되고 있지 않습니다. ABORTED 하위 상태는 Oracle CDC 인스턴스가 활성 상태였고 예기치 않게 중지되었음을 나타냅니다.

ABORTED 하위 상태는 상태가 활성 상태인 동안 Oracle CDC Instance가 실행되고 있지 않음을 감지하면 Oracle CDC Service 주 인스턴스에 의해 설정됩니다.
오류 0 1 Oracle CDC 인스턴스가 실행되고 있지 않습니다. 오류 상태는 CDC 인스턴스가 활성 상태였지만 복구할 수 없으며 비활성화된 오류가 발생했음을 나타냅니다. ERROR 상태에는 다음과 같은 하위 상태 코드가 포함됩니다.

잘못 구성됨: 복구할 수 없는 구성 오류가 검색되었습니다.

암호 필요: Oracle by Attunity의 변경 데이터 캡처 디자이너에 대해 설정된 암호가 없거나 구성된 암호가 잘못되었습니다. 서비스 비대칭 키 암호가 변경되었기 때문일 수 있습니다.
달리기 1 0 CDC 인스턴스가 실행 중이며 변경 레코드를 처리하고 있습니다. RUNNING 상태에는 다음과 같은 하위 상태 코드가 포함됩니다.

IDLE: 모든 변경 레코드가 처리되어 대상 컨트롤(_CT) 테이블에 저장되었습니다. 제어 테이블과 연결된 활성 트랜잭션이 없습니다.

처리: 아직 컨트롤(_CT) 테이블에 기록되지 않은 변경 레코드가 처리되고 있습니다.
중지 0 0 CDC 인스턴스가 실행되고 있지 않습니다. STOP 하위 상태는 CDC 인스턴스가 활성 상태였고 올바르게 중지되었음을 나타냅니다.
일시 중지됨 1 1 CDC 인스턴스가 실행 중이지만 복구 가능한 오류로 인해 처리가 일시 중단됩니다. SUSPENDED 상태에는 다음과 같은 하위 상태 코드가 포함됩니다.

연결 끊김: 원본 Oracle 데이터베이스와의 연결을 설정할 수 없습니다. 연결이 복원되면 처리가 다시 시작됩니다.

스토리지: 스토리지가 가득 찼습니다. 스토리지를 사용할 수 있게 되면 처리가 다시 시작됩니다. 경우에 따라 상태 테이블을 업데이트할 수 없으므로 이 상태가 표시되지 않을 수 있습니다.

LOGGER: 로거는 Oracle에 연결되어 있지만 일시적인 문제로 인해 Oracle 트랜잭션 로그를 읽을 수 없습니다.
DATAERROR x x 이 상태 코드는 xdbcdc_trace 테이블에만 사용됩니다. xdbcdc_state 테이블에 표시되지 않습니다. 이 상태의 추적 레코드는 Oracle 로그 레코드에 문제가 있음을 나타냅니다. 잘못된 로그 레코드는 데이터 열에 BLOB으로 저장됩니다. DATAERROR 상태에는 다음과 같은 하위 상태 코드가 포함됩니다.

BADRECORD: 연결된 로그 레코드를 구문 분석할 수 없습니다.

CONVERT-ERROR: 일부 열의 데이터를 캡처 테이블의 대상 열로 변환할 수 없습니다. 이 상태는 구성에서 변환 오류가 추적 레코드를 생성해야 한다고 지정하는 경우에만 나타날 수 있습니다.

Oracle CDC Service 상태는 SQL Server에 저장되므로 데이터베이스의 상태 값이 서비스의 실제 상태를 반영하지 않을 수 있습니다. 가장 일반적인 시나리오는 서비스가 SQL Server에 대한 연결을 끊고 어떤 이유로든 다시 시작할 수 없는 경우입니다. 이 경우 cdc.xdbcdc_state 저장된 상태가 부실해집니다. 마지막 업데이트 타임스탬프(UTC)가 1분 이상 오래된 경우 상태는 부실할 수 있습니다. 이 경우 Windows 이벤트 뷰어를 사용하여 서비스 상태에 대한 추가 정보를 찾습니다.

오류 처리

이 섹션에서는 Oracle CDC Service에서 오류를 처리하는 방법을 설명합니다.

로깅 (로그 기록)

Oracle CDC Service는 다음 위치 중 하나에 오류 정보를 만듭니다.

  • 로깅 오류와 함께 사용되며 Oracle CDC Service 수명 주기 이벤트(대상 SQL Server 인스턴스에 대한 연결 시작, 중지, 다시)를 나타내는 데 사용되는 Windows 이벤트 로그입니다.

  • oracle CDC Service 주 프로세스에서 일반적인 로깅 및 추적에 사용되는 MSXDBCDC.dbo.xdbcdc_trace 테이블입니다.

  • <cdc-database>.cdc.xdbcdc_trace 테이블로, Oracle CDC Instances의 일반 로깅 및 추적에 사용됩니다. 즉, 특정 Oracle CDC 인스턴스와 관련된 오류가 해당 인스턴스의 추적 테이블에 기록됩니다.

서비스는 Oracle CDC 서비스에서 정보를 기록합니다.

  • 서비스 제어 관리자에 의해 시작되거나 중지됩니다.

  • 연결된 SQL Server 인스턴스에 연결할 수 없으며 실패 후 연결이 성공적으로 설정되면 연결할 수 없습니다.

  • Oracle CDC Service 인스턴스를 시작하는 동안 오류가 발생했습니다.

  • Oracle CDC 인스턴스가 중단되었음을 감지합니다.

  • 예기치 않은 오류가 발생합니다.

인스턴스의 경우 CDC 인스턴스에 의해 정보가 기록됩니다.

  • 사용하거나 사용하지 않도록 설정됩니다.

  • 오류가 발생합니다.

  • 복구 가능한 오류에서 복구합니다.

추적 테이블은 문제 해결을 위해 자세한 추적 정보를 기록하는 데도 사용됩니다.

원본 Oracle 연결 오류 처리

Oracle CDC Service는 원본 Oracle 데이터베이스와의 영구 연결이 필요합니다. 서비스 구성과 관련이 없는 많은 연결 오류(예: 네트워킹 오류)는 일시적인 것으로 간주됩니다. 따라서 Oracle CDC Service가 Oracle 데이터베이스와의 연결을 설정할 수 없는 경우(연결이 끊긴 후 시작 또는 작업 중) 서비스는 상태를 SUSPENDED/DISCONNECTED로 변경하고 연결이 정기적으로 다시 시도되는 재시도 루프로 들어갑니다. 연결이 다시 설정되면 처리가 계속됩니다.

다른 유형의 연결 오류는 일시적이지 않습니다(예: 잘못된 자격 증명, 권한 부족 및 잘못된 데이터베이스 주소). 이러한 오류가 발생하면 Oracle CDC Service 상태가 ERROR/MISCONFIGURED 또는 ERROR/PASSWORD-REQUIRED 설정되고 서비스가 비활성화됩니다. 사용자가 기본 오류를 수정하면 처리를 다시 시작할 수 있도록 Oracle CDC 인스턴스를 수동으로 다시 사용하도록 설정해야 합니다.

오류가 일시적인지 여부가 명확하지 않은 경우 일시적이라고 가정하는 것이 가장 좋습니다.

대상 SQL Server 연결 오류 처리

Oracle CDC Service는 대상 SQL Server 인스턴스에 대한 영구 연결이 필요합니다. 이 연결은 다음을 위해 사용됩니다.

  • 현재 이 SQL Server 인스턴스에서 작업 중인 동일한 이름의 다른 서비스가 없는지 확인합니다.

  • 사용하거나 사용하지 않도록 설정된 Oracle CDC 인스턴스를 확인하고 해당 하위 프로세스를 시작(또는 중지)합니다.

서비스에서 대상 SQL Server 인스턴스와의 연결을 설정하고 이 이름으로 작동하는 유일한 Oracle CDC 서비스인지 확인하면 어떤 Oracle CDC 인스턴스가 사용하도록 설정되어 있는지 확인하고 처리 프로세스를 시작할 수 있습니다(나중에 서비스가 비활성화되면 이러한 프로세스를 중지). Oracle CDC 인스턴스는 SQL Server 연결을 사용하여 Oracle CDC 인스턴스의 CDC 데이터베이스를 사용합니다.

대상 SQL Server에 대한 연결이 실패할 때 오류가 처리되는 방법은 오류가 일시적인지 여부에 따라 달라집니다.

알려진 일시적이지 않은 오류(예: 잘못된 자격 증명, 권한 부족, 잘못된 연결 정보)의 경우 서비스는 Windows 이벤트 로그에 오류를 기록하고 중지합니다(SQL Server에 연결할 수 없으므로 추적 테이블에 쓸 수 없음). 이 경우 사용자는 오류를 해결하고 Oracle CDC Windows 서비스를 다시 시작해야 합니다.

일시적인 오류 및 예기치 않은 오류의 경우 작업이 여러 번 다시 시도되고 오류가 상당한 기간 동안 지속되는 경우 CDC Service는 CDC 인스턴스 하위 프로세스를 중지하고 초기 연결 시도로 돌아갑니다(이 시간까지 다른 컴퓨터의 Oracle CDC Service가 이미 명명된 CDC Service를 제어했을 수 있음).

대상 SQL Server Storage 전체 오류 처리

Oracle CDC Service가 대상 SQL Server CDC 데이터베이스에 새 변경 데이터를 삽입할 수 없음을 감지하면 이벤트 로그에 경고를 쓰고 추적 레코드를 삽입하려고 시도합니다(같은 이유로 실패할 수 있음). 그런 다음 성공할 때까지 특정 간격으로 작업을 다시 시도합니다.

Oracle CDC 오류 처리

Oracle CDC 인스턴스는 Oracle 트랜잭션 로그를 읽고 처리합니다. CDC 처리에서 오류가 발생하면 cdc.xdbcdc_state 테이블에 보고되며 사용자가 보고된 오류에 따라 수동으로 개입해야 합니다.

예를 들어 Oracle CDC 인스턴스가 장기간 활성화되지 않을 수 있으며 필요한 Oracle 트랜잭션 로그 파일을 더 이상 사용할 수 없습니다. 이 경우 Oracle DBA는 Oracle CDC 인스턴스에 필요한 로그를 복원하여 처리를 다시 시작해야 합니다.

예기치 않은 Oracle CDC 인스턴스 오류 처리

Oracle CDC Service는 해당 CDC 인스턴스 하위 프로세스를 모니터링합니다. CDC 인스턴스 하위 처리가 중단되면 CDC Service는 MSXDBCDC.dbo.xdbcdc_databases 테이블에서 이를 사용하지 않도록 설정하고 cdc.xdbcdc_state 상태를 ABORTED로 업데이트합니다. 이 경우 표준 Windows 오류 보고 대화 상자를 사용하여 추가 분석을 위해 이 오류를 보고합니다.

또한 참조하십시오

Attunity에서 Oracle용 데이터 캡처 디자이너 변경
Oracle CDC 인스턴스