복제 작업 문제 해결

이 페이지에서는 Cloud Data Fusion 복제 작업과 관련된 문제를 해결하는 방법을 보여줍니다.

예외: 스테이징 버킷을 만들 수 없음

버킷 이름 지정 규칙을 위반하면 복제 작업이 실패하고 파이프라인 로그에 다음과 같은 오류가 표시될 수 있습니다.

Caused by: java.io.IOException: Unable to create staging bucket
BUCKET_NAME in project PROJECT_NAME.

필요한 경우 스테이징 버킷 이름을 지정할 수 있습니다. 지정하지 않으면 복제 작업이 작업 이름에 서픽스를 추가하여 생성합니다. 경우에 따라 더 짧은 작업 이름을 사용하여 이 문제를 해결할 수 있습니다. 자세한 내용은 버킷 이름을 참조하세요.

MySQL CONVERT_TO_NULL 값이 설정되지 않음

이전 버전의 MySQL 커넥터/J(예: 버전 5)를 사용하는 경우 복제 작업이 실패하고 다음 오류가 발생합니다.

The connection property 'zeroDateTimeBehavior' only accepts values of the form:
'exception', 'round' or 'convertToNull'. The value 'CONVERT_TO_NULL' is not in
this set.

zeroDateTimeBehavior에 허용되는 값은 서로 다른 버전의 MySQL 커넥터/J 간에 호환되지 않습니다.

이 문제를 해결하려면 MySQL 커넥터/J 버전 8 이상을 사용하세요.

복제 및 SQL Server Always On 데이터베이스

Microsoft SQL Server 소스는 Always On 읽기 전용 복제본에서 변경사항을 캡처할 수 있습니다. 이 설정에서는 런타임 인수 source.connector.database.applicationIntent=ReadOnly를 복제 작업에 전달해야 합니다. 이 런타임 인수가 없으면 작업이 실패하고 다음 오류가 발생합니다.

Producer failure
java.lang.RuntimeException: com.microsoft.sqlserver.jdbc.SQLServerException:
Failed to update database "DATABASE_NAME" because the database is read-only.

이 문제를 해결하려면 source.connector.database.applicationIntent=ReadOnly런타임 인수로 설정합니다. 이는 내부적으로 snapshot.isolation.modesnapshot으로 설정합니다.

Dataproc 정적 클러스터의 복제 오류

복제 작업을 실행할 때 Dataproc 클러스터 노드에서 SSL 연결이 실패하고 java.lang.NullPointerException 또는 Connection reset 오류가 발생할 수 있습니다.

ERROR [SparkRunnerphase-1:i.c.c.i.a.r.ProgramControllerServiceAdapter@93] -
Spark program 'phase-1' failed with error: The driver could not establish a
secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption.
Error: "Connection reset ClientConnectionId:ID"

이 오류는 Dataproc에 설치된 JDK 버전에서 사용하도록 구성된 Conscrypt SSL 제공업체로 인해 발생합니다.

이 문제를 해결하려면 Conscrypt SSL 제공업체를 사용 중지하여 Java JDK용 기본 SSL 제공업체를 사용합니다. Conscrypt SSL 제공업체를 사용 중지하려면 Dataproc 클러스터를 시작할 때 다음 클러스터 속성을 설정합니다.

--properties dataproc:dataproc.conscrypt.provider.enable=false

SQL Server용 복제가 변경된 테이블의 모든 열을 복제하지 않음

SQL Server의 테이블에서 데이터를 복제할 때 복제 소스 테이블에 새로 추가된 열이 있는 경우 변경 데이터 캡처(CDC) 테이블에 자동으로 추가되지 않습니다. 기본 CDC 테이블에 수동으로 추가해야 합니다.

이 문제를 해결하려면 다음 단계를 따르세요.

  1. CDC 인스턴스를 사용 중지합니다.

    EXEC sp_cdc_disable_table
    @source_schema = N'dbo',
    @source_name = N'myTable',
    @capture_instance = 'dbo_myTable'
    GO
    
  2. CDC 인스턴스를 다시 사용 설정합니다.

    EXEC sp_cdc_enable_table
    @source_schema = N'dbo',
    @source_name = N'myTable',
    @role_name = NULL,
    @capture_instance = 'dbo_myTable'
    GO
    
  3. 새 복제 작업을 만듭니다.

자세한 내용은 소스 테이블 변경사항 처리를 참조하세요.

역할 및 권한 오류

액세스 제어에서 다음과 같은 문제가 발생합니다.

Cloud Data Fusion 서비스 계정 권한 문제

Oracle Database를 사용하여 복제 작업을 실행할 때 테이블 목록이 실패하고 다음 오류가 발생할 수 있습니다.

Error io.grpc.StatusRuntimeException: PERMISSION_DENIED: Permission
'datastream.streams.get' denied on 'projects/PROJECT_NAME/locations/REGION/streams/STREAM_NAME'

Oracle 데이터베이스로 복제 작업을 실행하면 Cloud Data Fusion이 백엔드에서 Datastream 서비스를 사용합니다. Datastream 서비스를 사용하는 데 필요한 권한을 얻으려면 관리자에게 Cloud Data Fusion 서비스 계정에 대한 Datastream 관리자(roles/datastream.admin) IAM 역할을 부여해 달라고 요청하세요.

변경 데이터 캡처를 볼 수 있는 권한이 부여되지 않음

SQL Server에서 데이터를 복제할 때 파이프라인 로그에 다음 오류가 표시될 수 있습니다.

No whitelisted table has enabled CDC, whitelisted table list does not contain any
table with CDC enabled or no table match the white/blacklist filter(s)

이 문제는 소스 연결 속성에 지정된 사용자에게 복제된 테이블의 변경 데이터 캡처(CDC)를 볼 권한이 없는 경우에 발생합니다. 이는 sys.sp_cdc_enable_table을 사용하여 테이블에 CDC를 사용 설정할 때 role_name 매개변수에 의해 제어됩니다.

CDC를 보는 데 필요한 권한을 부여하는 방법에 대한 자세한 내용은 테이블에서 CDC 사용 설정sys.sp_cdc_enable_table을 참조하세요.

사용자 정의 유형 권한 문제

복제 작업에서 사용하는 데이터베이스 사용자에게 사용자 정의 유형(UDT)에 대한 권한이 없으면 파이프라인 로그에 다음 오류가 표시될 수 있습니다.

java.lang.IllegalArgumentException: The primary key cannot reference a non-existent
column'oid' in table TABLE_NAME

이 오류 메시지에서 oid 열은 UDT일 수 있습니다.

이 문제를 해결하려면 데이터베이스에서 다음 명령어를 실행하여 사용자에게 액세스 권한을 부여합니다.

GRANT EXECUTE ON TYPE::UDT_NAME to YOUR_USER

SQL Server 에이전트가 실행되고 있지 않음

SQL Server 에이전트가 실행되고 있지 않으면 파이프라인 로그에 다음과 같은 오류가 표시될 수 있습니다.

No maximum LSN recorded in the database; please ensure that the SQL Server Agent
is running [io.debezium.connector.sqlserver.SqlServerStreamingChangeEventSource]

이 문제를 해결하려면 SQL Server 에이전트를 시작하세요. 자세한 내용은 사용 중인 운영체제에 따라 다음 문서를 참조하세요.

SQL Server Replication 파이프라인 버전이 최신 버전이 아님

SQL Server Replication 파이프라인 버전이 최신 버전이 아니면 파이프라인 로그에 다음과 같은 오류가 표시됩니다.

Method io/cdap/delta/sqlserver/SqlServerDeltaSource.configure(Lio/cdap/delta/api/SourceConfigurer;) is abstract

이 오류는 이전 버전의 소스 플러그인이 상대적으로 최신 버전의 델타 앱에서 작동하는 경우에 발생합니다. 이러한 경우 새 버전의 델타 앱으로 정의된 새 인터페이스가 구현되지 않습니다.

이 문제를 해결하려면 다음 단계를 따르세요.

  1. HTTP GET 요청을 제출하여 복제 작업에 대한 정보를 검색합니다.

    GET v3/namespaces/NAMESPACE_ID/apps/REPLICATOR_NAME
    

    자세한 내용은 복제 작업 세부정보 보기를 참조하세요.

  2. 복제 작업에서 사용하는 플러그인 및 델타 앱의 버전을 확인합니다.

  3. HTTP GET 요청을 제출하여 사용 가능한 아티팩트 목록을 검색합니다.

    GET /v3/namespaces/NAMESPACE_ID/artifacts
    

    자세한 내용은 사용 가능한 아티팩트 나열을 참조하세요.

인증 범위가 불충분한 정적 Dataproc 클러스터

불충분한 인증 범위를 사용하여 생성된 정적 Dataproc 클러스터를 사용하는 경우 파이프라인 로그에 다음과 같은 오류가 표시될 수 있습니다.

ERROR [worker-DeltaWorker-0:i.c.c.i.a.r.ProgramControllerServiceAdapter@92] - Worker
Program 'DeltaWorker' failed.
Caused by: io.grpc.StatusRuntimeException: PERMISSION_DENIED: Request had
insufficient authentication scopes.

이 문제를 해결하려면 새 정적 Dataproc 클러스터를 생성하고 동일한 프로젝트에서 이 클러스터의 cloud-platform 범위를 사용 설정합니다.