CDC 테이블을 다른 리전으로 마이그레이션

리전 간 데이터 세트 복제를 사용하여 Datastream 대상 데이터 세트를 다른 BigQuery 리전 또는 멀티 리전으로 이동할 수 있습니다. 이 워크플로는 스트림 다운타임을 최소화하고 소스 데이터베이스에서 전체 기록 백필을 방지하면서 활성 변경 데이터 캡처(CDC) 데이터 세트의 위치를 업데이트합니다.

마이그레이션 중에 보조 리전을 쿼리하면 불완전하거나 부정확한 결과가 반환될 수 있습니다. 마이그레이션 제한사항에 대한 자세한 내용은 리전 간 데이터 세트 복제를 참조하세요.

시작하기 전에

데이터를 다른 리전으로 마이그레이션하기 전에 다음 사항을 고려하세요.

  • 마이그레이션하는 데 시간이 걸리며 작업 중 스트림을 일시적으로 일시중지해야 합니다. 데이터 무결성을 유지하려면 스트림이 일시중지될 때 소스 데이터베이스에서 변경 로그를 유지해야 합니다. 스트림 일시중지 기간을 추정하려면 데이터 세트의 max_staleness 값과 가장 오래 실행되는 병합 작업을 결합합니다.
    • 병합 작업을 완료하는 데 걸리는 시간에 대한 자세한 내용은 권장 테이블 max_staleness 값을 참조하세요.
    • 데이터 세트에서 최대 max_staleness를 찾으려면 테이블의 현재 max_staleness 값 확인을 참조하고 특정 요구사항에 맞게 쿼리를 조정합니다.
    • 예상 일시중지가 너무 길어서 소스 데이터베이스에서 지원할 수 없는 경우 데이터 세트의 테이블에 대한 max_staleness 값을 일시적으로 줄일 수도 있습니다.
  • 마이그레이션을 수행하는 사용자에게 대상 리전에 충분한 BigQuery 리소스가 있는지 확인합니다(쿼리 예약 및 백그라운드 예약). 예약에 대한 자세한 내용은 예약 할당을 참고하세요.
  • 마이그레이션을 수행하는 사용자에게 Identity and Access Management(IAM) 제어 또는 VPC 서비스 제어와 같이 이 작업을 수행하기 위한 충분한 권한이 있는지 확인합니다.

마이그레이션 단계

데이터 세트 마이그레이션을 시작하려면 BigQuery 데이터 복제를 사용하세요.

  1. 콘솔 Google Cloud 에서 BigQuery Studio 페이지로 이동합니다.

    BigQuery Studio로 이동

  2. 새 리전에서 BigQuery 데이터 세트 복제본을 만듭니다.

    ALTER SCHEMA DATASET_NAME
    ADD REPLICA 'NEW_REGION'
    OPTIONS(location='NEW_REGION');
    

    다음을 바꿉니다.

    • DATASET_NAME: 만들려는 데이터 세트의 이름입니다.
    • NEW_REGION: 데이터 세트를 만들려는 리전의 이름입니다. 예를 들면 region-us입니다.
  3. 마이그레이션 진행 상황을 모니터링하고 복제본의 복사 워터마크가 기본 노드에서 몇 분 이내로 올 때까지 기다립니다. BigQuery INFORMATION_SCHEMA에서 다음 쿼리를 실행하여 마이그레이션 진행 상황을 확인할 수 있습니다.

    SELECT
    catalog_name as project_id,
    schema_name as dataset_name,
    replication_time as dataset_replica_staleness
    FROM
    'NEW_REGION'.INFORMATION_SCHEMA.SCHEMATA_REPLICAS
    WHERE
    catalog_name = PROJECT_ID
    AND schema_name = DATASET_NAME
    AND location = NEW_REGION;
    

    다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID입니다.
    • DATASET_NAME: 데이터 세트의 이름
    • DATASET_REPLICA_STALENESS: 생성한 데이터 세트 복제본 내 테이블의 비활성 구성입니다.
    • NEW_REGION: 데이터 세트를 만든 리전입니다.
  4. 기존 Datastream 스트림을 일시중지합니다. 자세한 내용은 스트림 일시중지를 참조하세요.

  5. 스트림이 드레인될 때까지 기다리고 스트림이 PAUSED 상태로 전환된 시간을 기록해 둡니다.

  6. 테이블에 대한 upsert_stream_apply_watermark를 확인하여 최신 CDC 변경사항이 BigQuery 테이블에 적용되었는지 확인합니다. 다음 쿼리를 실행하고 워터마크 타임스탬프가 스트림이 일시중지되고 10분 후 표시되는지 확인합니다.

    SELECT table_name, upsert_stream_apply_watermark
    FROM DATASET_NAME.INFORMATION_SCHEMA.TABLES
    

    특정 테이블에 대해서만 쿼리를 실행하려면 다음 WHERE 절을 추가합니다.

    WHERE table_name = 'TABLE_NAME'
    

    다음을 바꿉니다.

    • DATASET_NAME: 데이터 세트의 이름
    • TABLE_NAME: 선택사항입니다. upsert_stream_apply_watermark를 확인하려는 테이블입니다.
  7. 3단계의 쿼리를 사용하여 새 리전 복사 워터마크가 6단계에서 캡처된 upsert_stream_apply_watermark보다 나중에 생성되었는지 확인합니다.

  8. 원하는 경우 원본 리전의 기본 데이터 세트에 있는 여러 테이블을 새 리전의 복제본과 수동으로 비교하여 모든 데이터가 올바르게 복사되었는지 확인합니다.

  9. BigQuery Studio에서 다음 명령어를 실행하여 BigQuery 데이터 세트 복제본을 승격합니다.

    ALTER SCHEMA DATASET_NAME
    SET OPTIONS(primary_replica = 'NEW_REGION');
    

    다음을 바꿉니다.

    • DATASET_NAME: 데이터 세트의 이름
    • NEW_REGION: 데이터 세트를 만든 리전입니다.
  10. 원하는 경우 원본 데이터 세트(현재 복제본)가 더 이상 필요하지 않으며 추가 비용이 발생하지 않도록 하려면 BigQuery Studio로 이동하여 원본 BigQuery 데이터 세트를 삭제합니다.

    ALTER SCHEMA DATASET_NAME DROP REPLICA IF EXISTS ORIGINAL_REGION;
    

    다음을 바꿉니다.

    • DATASET_NAME: 원본 데이터 세트의 이름입니다.
    • ORIGINAL_REGION: 원본 데이터 세트의 리전입니다.
  11. 완전히 동일한 구성이지만 새로운 BigQuery 대상 위치를 사용하여 새 스트림을 만듭니다.

  12. 새 스트림을 시작합니다.

    중복 이벤트를 복제하지 않으려면 특정 위치에서 스트림을 시작하세요.

    • MySQL 및 Oracle 소스의 경우: 원본 스트림의 로그를 검사하고 스트림이 성공적으로 읽은 마지막 위치를 찾아 로그 위치를 식별할 수 있습니다. 특정 위치에서 스트림을 시작하는 방법에 대한 자세한 내용은 스트림 관리를 참조하세요.
    • PostgreSQL 소스: 새 스트림이 복제 슬롯의 첫 번째 로그 시퀀스 넘버 (LSN)의 변경사항을 읽기 시작합니다. 원본 스트림에서 이러한 변경사항 중 일부를 이미 처리했을 수 있기 때문에 복제 슬롯의 포인터를 Datastream이 읽은 마지막 LSN으로 수동 변경합니다. 이 LSN은 Datastream 소비자 로그에서 확인할 수 있습니다.
  13. 원하는 경우 원본 스트림을 삭제합니다.