Oracle에서 PostgreSQL용 AlloyDB로의 마이그레이션 문제 진단

이 페이지에는 다음과 관련된 알려진 오류와 권장 문제 해결 단계가 나와 있습니다.

이전 작업 오류

런타임 중에 이전 작업 프로세스에 오류가 발생할 수 있습니다.

  • 소스 데이터베이스의 잘못된 비밀번호와 같은 일부 오류는 복구할 수 있습니다. 이러한 오류가 수정되면 마이그레이션 작업이 자동으로 다시 시작됩니다.
  • 데이터 복제 오류와 같이 복구할 수 없는 오류도 있습니다. 이러한 오류가 수정된 후에는 마이그레이션 작업을 다시 시작해야 합니다.

오류가 발생하면 이전 작업 상태가 Failed로 변경되고 하위 상태는 실패 전의 마지막 상태를 반영합니다. 오류를 해결하려면 실패한 이전 작업으로 이동하여 오류를 확인하고 오류 메시지에 설명된 단계를 따릅니다. 오류에 관한 자세한 내용을 보려면 이전 작업의 링크를 사용하여 Cloud Monitoring으로 이동합니다. 로그가 특정 이전 작업으로 필터링됩니다.

다음 표에서 문제의 예와 해결 방법을 확인할 수 있습니다.

증상 가능한 원인 해결 방법
오류 메시지: Database Migration Service can't set up a tunnel to be connected to the bastion host. Database Migration Service에서 배스천 호스트에 액세스할 수 없거나 배스천 호스트에서 연결을 허용하지 않습니다. 소스 연결 프로필 SSH 터널 서버 구성에서 정방향 SSH 터널 설정을 확인한 후 다시 시도해 보세요.
오류 메시지: Database Migration Service can't connect to the database 또는 Database Migration Service private connectivity error, cannot connect to the database Database Migration Service에서 소스 Oracle 데이터베이스에 연결할 수 없습니다.

프로젝트에서 소스 데이터베이스에 액세스할 수 있는지 확인합니다. 소스 연결 구성 방법과 관련된 설정을 확인합니다.

포함된 특정 Oracle 오류 코드(예: ORA-12170: TNS:Connect timeout occurred)가 있는 경우 Oracle 문서에서 자세한 내용을 확인하세요.

오류 메시지: Archiving mode is not ARCHIVELOG. 소스 데이터베이스가 ARCHIVELOG 모드로 실행되지 않습니다. ARCHIVELOG 모드를 사용하도록 소스 데이터베이스를 구성합니다. 자세한 내용은 소스 Oracle 데이터베이스 구성을 참고하세요.
오류 메시지: Supplemental logging ("ALL COLUMN LOGGING") isn't turned on for the tables listed below. 소스 데이터베이스에 보조 로그 데이터가 사용 설정되어 있지 않습니다. 추가 로그 데이터를 사용 설정하고 모드를 ALL로 설정합니다. 자세한 내용은 소스 Oracle 데이터베이스 구성을 참고하세요.
오류 메시지: No Archive Log Files were found in the source. Database Migration Service는 닫힌 보관처리 로그만 읽으며 소스 데이터베이스에서 로그를 찾을 수 없습니다.
  1. 소스 데이터베이스에서 다음 명령어를 실행하여 현재 로그 파일 ALTER SYSTEM SWITCH LOGFILE을 닫습니다.
  2. 로그를 다시 찾으세요.

데이터베이스에 활성 쓰기 작업이 없는 경우 INSERT 작업을 하나 이상 실행하여 로그 생성을 트리거해야 할 수 있습니다.

오류 메시지: We're missing the necessary permissions to read from the source. 소스 데이터베이스의 이전 사용자 계정에 필요한 권한이 없습니다.

Database Migration Service는 소스 연결 프로필에서 구성한 사용자 계정으로 소스에 연결됩니다. 이 계정에는 소스 데이터베이스의 데이터를 읽기 위한 특정 권한 집합 (예: SELECT ANY TABLE)이 필요합니다.

이전 사용자 계정에 필요한 권한이 있는지 확인합니다. 자세한 내용은 소스 Oracle 데이터베이스 구성을 참고하세요.

오류 메시지: Unable to connect to the destination database. 대상 데이터베이스에 연결하는 중에 문제가 발생했습니다. 프로젝트에서 대상 데이터베이스에 액세스할 수 있는지 확인합니다. 대상 연결 구성 방법과 관련된 설정을 확인합니다.
오류 메시지: The following tables don't exist in the destination database: {table_names}. 마이그레이션하려는 나열된 테이블이 대상 데이터베이스에 없습니다. 소스 스키마를 변환하면 Database Migration Service에서 필요한 테이블과 정의를 만듭니다.
오류 메시지: password authentication failed for user {username}. 대상 데이터베이스의 사용자 이름 또는 비밀번호가 잘못 구성되었습니다. 대상 PostgreSQL 연결 프로필이 올바른 사용자 이름과 비밀번호로 올바르게 구성되어 있는지 확인합니다.
오류 메시지: The following tables in the destination database don't have primary keys: {table_names}. 오류 메시지에 나열된 테이블이 대상 데이터베이스에 있지만 기본 키가 없습니다.

Database Migration Service 변환 작업공간은 스키마를 변환할 때 기본 키가 없는 테이블에 기본 키를 자동으로 추가합니다.

기존 전환 작업공간을 사용하는 경우 대상에서 기본 키를 수동으로 만들어야 합니다. 자세한 내용은 기존 변환 작업공간을 참고하세요.

경고: The following tables have foreign keys: {table_names} 오류 메시지에 나열된 테이블이 대상 데이터베이스에 있지만 외래 키가 있습니다.

Database Migration Service는 트랜잭션 방식으로 데이터를 복제하지 않으므로 테이블이 순서대로 마이그레이션되지 않을 수 있습니다. 외래 키가 있고 외래 키를 사용하는 하위 테이블이 상위 테이블보다 먼저 이전되면 복제 오류가 발생할 수 있습니다.

이러한 데이터 무결성 문제를 방지하려면 이전 사용자의 REPLICATION 옵션을 사용하여 외래 키를 건너뜁니다. 자세한 내용은 외래 키 및 트리거 고려사항을 참고하세요.

오류 메시지: Unable to resume replication as log position is lost. 이 오류는 복제 프로세스가 장시간 일시중지되어 로그 위치가 손실될 때 발생할 수 있습니다. 마이그레이션 작업은 로그 보관 기간보다 길거나 이에 가까운 시간 동안 일시중지되어서는 안 됩니다. 로그 위치가 손실되면 마이그레이션 작업을 다시 만들어야 합니다.
오류 메시지: ORA-00942: table or view does not exist. 이 오류는 Oracle 서버에서 캐싱한 결과로 발생할 수 있습니다. 데이터베이스 사용자를 다시 만들어 캐싱 문제를 해결합니다.
마이그레이션 작업이 전체 덤프 단계에 머물러 변경 데이터 캡처 (CDC) 단계로 진행되지 않습니다. Database Migration Service가 일부 테이블에 대한 전체 덤프를 계속 실행 중이거나 하나 이상의 테이블이 오류로 인해 전체 덤프를 완료할 수 없습니다.
  • 이전 작업 오류를 확인하고 테이블에 적용되는 오류를 수정하거나 작업에서 연결된 테이블을 삭제합니다.
  • Database Migration Service 로그에서 진행 중인 전체 덤프 활동을 확인하고 완료될 때까지 기다립니다.

연결 문제

이 섹션에서는 잠재적인 네트워크 연결 문제의 문제 해결 단계를 나열하고 설명합니다.

대상 데이터베이스에 연결할 수 없음: EOF

연결 테스트를 실행하면 [DATABASE] unable to connect to the destination database: EOF 오류 메시지가 반환됩니다.

원인: 서비스 연결이 잘못 구성되었습니다.

시도해 볼 수 있는 조치: 서비스 첨부파일 Terraform 구성 파일에서 enable_proxy_protocolfalse로 설정되어 있는지 확인합니다. 프록시 프로토콜은 NGINX 및 Apache와 같은 HTTP 서버에서만 지원됩니다.

gcloud를 사용하여 Private Service Connect 설정을 만들면 기본적으로 프록시 프로토콜이 사용 중지됩니다.

연결 시간 초과, 연결 거부됨

연결 테스트 실행에 실패하거나 시간이 초과됩니다. 이는 Private Service Connect 설정 내에서 라우팅이 잘못 구성되어서 발생할 가능성이 큽니다. 이 문제는 여러 가지 이유로 발생할 수 있습니다.

원인: Private Service Connect NAT CIDR 범위가 배스천이 있는 Private Service Connect 서브넷, 특히 배스천 VM nic0 인터페이스에 액세스하도록 허용하는 방화벽 규칙이 누락되었습니다.

시도해 볼 작업: 조직 정책이 PSC 지원이 아닌 PostgreSQL용 AlloyDB 인스턴스의 대상 비공개 IP 연결을 구성하기 위한 Terraform 스크립트 예시에서 정의된 psc_sp_in_fw 방화벽 규칙과 같은 내부 방화벽 규칙을 제한하지 않는지 확인합니다.

가능한 원인: 프록시가 다운되었습니다. 제공된 포트에 리스너가 없으므로 연결이 중단됩니다.

시도해 볼 수 있는 작업: 배스천 VM에 SSH 연결을 설정하고 다음 명령어를 사용하여 프록시를 검색해 볼 수 있습니다.

  • netstat -tunalp | grep PORT

명령어에 대한 응답을 분석합니다.

  • 빈 응답이 표시되면 프록시가 다운된 것입니다. 다음 명령어를 실행해 보세요.

    sudo su; cd /를 실행하여 Dante 서버가 설치되어 있는지 확인합니다.sudo dpkg -s dante-server

    • 프록시가 설치되면 다음 메시지가 표시됩니다.

      Status: install ok installed

    • 프록시가 설치되어 있지 않으면 라우터가 누락되었을 가능성이 큽니다. 라우터를 추가하고 apt-get install dante-server를 실행하여 프록시를 다운로드할 수 있는지 확인합니다.

  • 프록시가 실행 중이고 제공된 포트에서 리슨하는 경우 다음을 실행하여 프록시에 연결해 보세요.

    1. PostgreSQL 클라이언트를 설치합니다.

      sudo apt-get install postgresql-client

    2. PostgreSQL 데이터베이스에 연결합니다.

      psql -h 127.0.0.1 -p PORT -U DBUSERNAME -W (비밀번호를 입력하라는 메시지가 표시됨)

      다음을 바꿉니다.

      • PORT: 데이터베이스 포트 번호입니다.
      • DBUSERNAME: PostgreSQL 데이터베이스에 연결하는 데 사용되는 사용자 이름입니다.
    3. telnet 클라이언트를 설치합니다.

      sudo apt-get install telnet

    4. telnet 클라이언트에 연결합니다.

      telnet 127.0.0.1 PORT

      PORT를 데이터베이스 포트 번호로 바꿉니다.

    명령어의 결과에 따라 다음과 같이 진행합니다.

    • 명령어로 연결을 열 수 없는 경우 프록시 로그를 살펴보고 근본 원인을 찾으세요. 근본 원인은 PostgreSQL용 AlloyDB 인스턴스 설정에 따라 다를 수 있습니다.

    • telnet을 사용하여 연결이 열렸지만 클라이언트에서 중단되는 경우 배스천 IP 주소 라우팅에 문제가 있을 수 있습니다. VM의 터미널에 ip route를 입력합니다. 보조 nic (nic1, DB_SUBNETWORK_GATEWAY IP 주소)를 사용하여 PostgreSQL용 AlloyDB 인스턴스 비공개 IP 주소로 연결을 라우팅하는 라우팅 규칙을 찾을 수 있는지 확인합니다.

원인: 서비스 연결이 Database Migration Service에서 오는 엔드포인트 연결을 수락하지 않습니다. 서비스 연결에는 허용된 프로젝트 목록이 포함되어 있으며 데이터베이스 마이그레이션 서비스 프로젝트가 목록에 포함되어 있지 않습니다.

시도해 볼 수 있는 조치: 이 문제를 해결하려면 다음 중 하나를 시도해 보세요.

  • Google Cloud 콘솔에서 Private Service Connect로 이동합니다.

    Private Service Connect로 이동

    게시된 서비스 탭에서 서비스 첨부파일의 Database Migration Service 연결을 수락합니다 (대기 중인 경우).

  • 요청하는 프로젝트를 서비스 연결의 허용 목록에 있는 프로젝트에 추가합니다(거부된 경우).

    • Terraform에서 허용 목록에 추가된 프로젝트를 추가하는 방법에 관한 자세한 내용은 Terraform 문서를 참고하세요.

    • gcloud에서 허용 목록에 추가된 프로젝트를 추가하는 방법에 관한 자세한 내용은 Google Cloud CLI 참조 문서를 참고하세요.

    그래도 문제가 해결되지 않으면 연결 프로필을 다시 만듭니다.

  • Private Service Connect 연결과 연결된 연결 프로필을 삭제하고 다시 만듭니다.

Oracle SCAN 오류 문제 해결

이 섹션에서는 단일 클라이언트 액세스 이름 (SCAN) 기능을 사용하여 Oracle Real Application Clusters (RAC) 소스에서 이전할 때 발생할 수 있는 잠재적 문제를 설명합니다.

Oracle SCAN 데이터베이스에 연결할 수 없음

연결 테스트 실행에 실패하거나 시간이 초과됩니다.

원인: Oracle SCAN 소스 데이터베이스에 직접 연결하려고 할 수 있습니다. Database Migration Service는 Oracle RAC 환경에서 SCAN 기능을 사용하여 데이터베이스에 대한 직접 연결을 지원하지 않습니다.

시도해 볼 수 있는 조치: 이 문제를 해결하려면 다음 중 하나를 시도해 보세요.

  • 노드 중 하나에 직접 연결합니다.

  • Oracle 연결 관리자를 사용합니다.

  • HAProxy와 같은 리버스 프록시 솔루션을 사용하여 비공개 연결 구성을 만듭니다.