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

이 페이지에서는 BigQuery에 대한 Datastream 복제를 설정했지만 대상 데이터 세트를 잘못된 리전에 구성할 때의 권장사항을 설명합니다. 그런 다음 소스 데이터베이스의 모든 데이터를 BigQuery로 다시 동기화하지 않고 데이터 세트를 다른 리전(또는 멀티 리전)으로 이동하려고 합니다.

시작하기 전에

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

  • 마이그레이션하는 데 시간이 걸리며 작업 중 스트림을 일시적으로 일시중지해야 합니다. 데이터 무결성을 유지하려면 스트림이 일시중지될 때 소스 데이터베이스에서 변경 로그를 유지해야 합니다. 스트림 일시중지 기간을 추정하려면 데이터 세트의 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. 선택적으로 원본 스트림을 삭제합니다.