다음을 통해 공유


Azure SQL 데이터 동기화 모범 사례

적용 대상: Azure SQL Database

이 문서에서는 Azure SQL 데이터 동기화에 대한 모범 사례를 설명합니다.

SQL 데이터 동기화에 대한 개요는 Azure SQL 데이터 동기화를 사용하여 여러 클라우드 및 온-프레미스 데이터베이스에서 데이터 동기화를 참조하세요.

보안 및 안정성

클라이언트 에이전트

  • 네트워크 서비스 액세스 권한을 보유한 최소 권한 사용자 계정을 사용하여 클라이언트 에이전트를 설치합니다.
  • SQL Server가 설치된 서버와 다른 서버에 클라이언트 에이전트를 설치합니다.
  • 온-프레미스 데이터베이스를 둘 이상의 에이전트에 등록하지 마세요.
    • 여러 동기화 그룹에 대한 여러 테이블을 동기화하는 경우에도 마찬가지입니다.
    • 여러 클라이언트 에이전트에 온-프레미스 데이터베이스를 등록하면 동기화 그룹 중 하나를 삭제할 때 문제가 발생합니다.

최소 필수 권한이 있는 데이터베이스 계정

  • 동기화 설정의 경우:

    • SQL Server 권한: 테이블 만들기/변경, 데이터베이스 변경, 프로시저 만들기, 스키마 선택/변경, 사용자 정의 형식 만들기. 이러한 권한은 기본 제공 데이터베이스 역할인 ddl_admin에 포함됩니다(다른 권한과 함께).
    • 리소스 그룹 수준에서 SQL DB 기여자 역할의 멤버 자격이 필요합니다. 자세한 내용은 Azure Portal을 사용하여 Azure 역할 할당을 참조하십시오. 기여자 또는 소유자와 같은 광범위한 역할의 멤버 자격도 이미 할당된 경우 작동합니다.
    • 구독 수준의 권한은 필요하지 않지만 구독에서 여러 Azure 데이터 동기화 구현에 필요한 권한을 제공하는 간소화된 방법(최소 필수 권한 방식은 아님)을 제공할 수 있습니다. 사용되지 않는 원래 API에는 이러한 Azure RBAC 권한이 필요했지만 더 이상 사용하지 않습니다.
      • "Microsoft.Sql/locations/syncMemberOperationResults/read"
      • "Microsoft.Sql/locations/syncAgentOperationResults/read"
      • "Microsoft.Sql/locations/syncGroupOperationResults/read"
  • 진행 중인 동기화의 경우.

    • SQL Server 권한: 동기화를 위해 선택된 사용자 테이블에 대한 SELECT, INSERT, UPDATE, DELETE 권한. 사용자 정의 테이블 형식에 대한 EXECUTE 권한.
    • SQL Server 권한: 동기화 메타데이터 및 시스템에서 만든 추적 테이블에 대한 SELECT, INSERT, UPDATE, DELETE 권한. 서비스에서 만든 저장 프로시저에 대한 EXECUTE 권한.
      • DataSync 스키마는 허브 데이터베이스 및 멤버 데이터베이스에서 시스템 생성 개체에 사용됩니다.
      • dss 스키마 및 TaskHosting 스키마는 동기화 메타데이터 데이터베이스에서 시스템 생성 개체에 사용됩니다.
  • 프로비전을 해제하는 경우.

    • SQL Server 권한: 동기화의 모든 테이블 변경, 동기화 메타데이터 테이블에서 SELECT 및 DELETE, 동기화 추적 테이블과 저장 프로시저 및 사용자 정의 형식의 CONTROL.
    • 정리를 위해 DataSync 스키마 및 dss 스키마, TaskHosting스키마에서 시스템에서 만든 개체를 제거합니다.

Azure SQL Database는 단일 자격 증명 세트만 지원합니다. 이 제약 조건 내에서 이러한 작업을 수행하려면 다음 옵션을 고려합니다.

  • 자격 증명을 다른 단계로 변경합니다(예를 들어 설정에는 credentials1, 진행 중에는 credentials2).
  • 자격 증명의 권한을 변경합니다(즉, 동기화가 설정된 후 권한 변경).

감사

동기화 그룹의 데이터베이스 수준에서 감사를 사용하도록 설정하는 것이 좋습니다. Azure SQL 데이터베이스에서 감사를 사용하도록 설정하거나 SQL Server 데이터베이스에서 감사를 사용하도록 설정하는 방법을 설명합니다.

설정

데이터베이스 고려 사항 및 제약 조건

데이터베이스 크기

새 데이터베이스를 만들 때 항상 배포한 데이터베이스보다 크도록 최대 크기를 설정합니다. 최대 크기를 배포된 데이터베이스보다 크게 설정하지 않으면 동기화가 실패합니다. SQL 데이터 동기화에서 자동 증가 기능을 제공하지는 않지만 ALTER DATABASE 명령을 실행하여 데이터베이스를 생성한 후 크기를 늘릴 수 있습니다. 데이터베이스 크기 한도 내에 있는지 확인합니다.

Important

SQL 데이터 동기화에서는 각 데이터베이스에 추가 메타데이터를 저장합니다. 필요한 공간을 계산할 때 이 메타데이터를 고려해야 합니다. 추가 오버 헤드의 양은 테이블 너비(예: 테이블이 좁으면 더 많은 오버헤드가 필요) 및 트래픽 양에 비례합니다.

테이블 고려 사항 및 제약 조건

테이블 선택

동기화 그룹의 데이터베이스에 있는 모든 테이블을 포함하지 않아도 됩니다. 동기화 그룹에 포함하는 테이블은 효율성과 비용에 영향을 줍니다. 비즈니스에 필요한 경우에만 동기화 그룹에 테이블 및 해당 테이블이 종속된 테이블을 포함합니다.

기본 키

동기화 그룹의 각 테이블에는 기본 키가 있어야 합니다. SQL 데이터 동기화는 기본 키가 없는 테이블을 동기화할 수 없습니다.

SQL 데이터 동기화를 프로덕션에 사용하기 전에 초기 및 지속적인 동기화 성능을 테스트하세요.

빈 테이블은 최고의 성능을 제공합니다.

빈 테이블은 초기화 시 최고의 성능을 제공합니다. 대상 테이블이 비어 있으면 데이터 동기화는 대량 삽입을 사용하여 데이터를 로드합니다. 그렇지 않으면 데이터 동기화는 행 단위 비교 및 삽입을 수행하여 충돌을 검사합니다. 하지만 성능 문제가 없는 경우 이미 데이터가 들어 있는 테이블 간에 동기화를 설정할 수 있습니다.

대상 데이터베이스 프로비전

SQL 데이터 동기화에서는 기본 데이터베이스 자동 프로비전을 제공합니다.

이 섹션에서는 SQL 데이터 동기화에서 프로비전의 제한 사항에 대해 설명합니다.

자동 프로비전 제한 사항

SQL 데이터 동기화의 자동 프로비전에는 다음과 같은 제한 사항이 있습니다.

  • 목적지 테이블에서 생성된 열만 선택합니다. 동기화 그룹에 속하지 않은 열은 목적지 테이블에서 프로비전되지 않습니다.
  • 인덱스는 선택한 열에 대해서만 생성됩니다. 원본 테이블 인덱스에 동기화 그룹의 일부가 아닌 열이 있으면 해당 인덱스는 대상 테이블에서 프로비전되지 않습니다.
  • XML 형식 열의 인덱스는 프로비전되지 않습니다.
  • 데이터 동기화는 Unique, Clustered/Non-Clustered라는 두 가지 인덱스 속성만 지원합니다. IGNORE_DUP_KEY와 같은 인덱스의 다른 속성, 여기서 필터 조건자 등은 지원되지 않으며 원본 인덱스에 이러한 속성이 설정된 경우에도 이러한 속성 없이 대상 인덱스가 프로비전됩니다.
  • CHECK 제약 조건은 프로비전되지 않습니다.
  • 원본 테이블의 기존 트리거는 프로비전되지 않습니다.
  • 보기 및 저장 프로시저는 목적지 데이터베이스에서 생성되지 않습니다.
  • 외래 키 제약 조건에서 ON UPDATE CASCADE 및 ON DELETE CASCADE 작업은 목적지 테이블에서 다시 생성되지 않습니다.
  • 정밀도가 28을 초과하는 소수 또는 숫자 열이 있는 경우 동기화하는 동안 SQL 데이터 동기화에서 변환 오버플로 문제가 발생할 수 있습니다. 소수 또는 숫자 열의 정밀도 자릿수를 28 이하로 제한하는 것이 좋습니다.

권장 사항

  • SQL 데이터 동기화 자동 프로비전 기능은 서비스를 시험해 보는 경우에만 사용합니다.
  • 프로덕션의 경우 데이터베이스 스키마를 프로비전합니다.

허브 데이터베이스를 찾을 수 있는 위치

엔터프라이즈-클라우드 시나리오

대기 시간을 최소화하려면 허브 데이터베이스를 동기화 그룹에서 데이터베이스 트래픽이 가장 많이 집중된 상태와 가깝게 유지합니다.

클라우드-클라우드 시나리오

  • 동기화 그룹의 모든 데이터베이스가 한 데이터 센터에 있는 경우 허브는 동일한 데이터 센터에 있어야 합니다. 이 구성은 대기 시간 및 데이터 센터 간의 데이터 전송 비용을 줄입니다.
  • 동기화 그룹의 데이터베이스가 여러 데이터 센터에 있는 경우 허브는 대부분의 데이터베이스 및 데이터베이스 트래픽과 동일한 데이터 센터에 있어야 합니다.

혼합 시나리오

이전 지침을 복잡한 동기화 그룹 구성(예: 엔터프라이즈-클라우드 및 클라우드-클라우드 시나리오가 혼합된 구성)에 적용합니다.

동기화

느리고 비용이 많이 드는 초기 동기화 방지

이 섹션에서는 동기화 그룹의 초기 동기화에 대해 설명합니다. 초기 동기화가 더 오래 걸리고 필요 이상으로 비용이 많이 드는 것을 방지하는 방법을 알아봅니다.

초기 동기화의 작동 원리

동기화 그룹을 생성할 때 하나의 데이터베이스에 있는 데이터로만 시작합니다. 여러 데이터베이스에 데이터가 있으면 SQL 데이터 동기화는 각 행을 해결해야 하는 충돌로 처리합니다. 이 충돌을 해결하느라 초기 동기화가 느리게 진행됩니다. 여러 데이터베이스에 데이터가 있으면 데이터베이스 크기에 따라 초기 동기화가 며칠부터 몇 달까지 걸릴 수 있습니다.

데이터베이스가 서로 다른 데이터 센터에 있는 경우 각 행은 서로 다른 데이터 센터 사이에서 이동해야 합니다. 이렇게 하면 초기 동기화 비용이 증가합니다.

추천

되도록이면 동기화 그룹의 여러 데이터베이스 중 특정 데이터베이스의 데이터부터 시작합니다.

동기화 루프를 방지하는 디자인

동기화 루프는 동기화 그룹 내에 순환 참조가 있을 때 발생합니다. 이 시나리오에서 한 데이터베이스의 각 변경 내용은 동기화 그룹의 데이터베이스를 통해 끝없이 순환하며 복제됩니다.

동기화 루프로 인해 성능을 저하시키고 비용이 크게 증가할 수 있으므로 동기화 루프를 피해야 합니다.

전파되지 않는 변경 내용

변경 내용이 전파되지 않는 이유

다음 이유 중 하나로 인해 변경 내용이 전파되지 않을 수 있습니다.

  • 스키마/데이터 형식이 호환되지 않는 경우.
  • null을 허용하지 않는 열에 null을 삽입하는 경우.
  • 외래 키 제약 조건을 위반하는 경우.

변경 내용이 전파되지 못하면 어떻게 되나요?

  • 동기화 그룹은 경고 상태임을 표시합니다.
  • 세부 정보는 포털 UI 로그 뷰어에 표시됩니다.
  • 문제가 45일 동안 해결되지 않으면 데이터베이스가 만료됩니다.

참고 항목

이러한 변경 내용은 전파되지 않습니다. 이 시나리오에서 복구하는 유일한 방법은 동기화 그룹을 다시 생성하는 것입니다.

추천

포털 및 로그 인터페이스를 통해 동기화 그룹 및 데이터베이스 상태를 정기적으로 모니터링합니다.

유지 관리

만료된 데이터베이스 및 동기화 그룹 방지

동기화 그룹 내 동기화 그룹 또는 데이터베이스가 만료될 수 있습니다. 동기화 그룹의 상태가 만료인 경우 작동이 중지됩니다. 데이터베이스의 상태가 만료인 경우 데이터가 손실될 수 있습니다. 복구하는 대신 이 시나리오를 피하는 것이 가장 좋습니다.

데이터베이스 만료 상태 방지

데이터베이스의 상태는 45일 이상 오프라인일 경우 만료로 설정됩니다. 데이터베이스의 만료 상태를 피하려면 45일 이상 오프라인 상태인 데이터베이스가 없는지 확인합니다.

만료된 동기화 그룹 방지

동기화 그룹의 변경 내용이 45일 이상 동기화 그룹의 나머지 그룹으로 전파되지 않으면 동기화 그룹의 상태가 만료로 설정됩니다. 동기화 그룹이 만료 상태가 되는 것을 방지하려면 정기적으로 동기화 그룹의 기록 로그를 확인합니다. 모든 충돌을 해결하고 변경 내용이 동기화 그룹 데이터베이스 전체에 성공적으로 전파됨을 확인합니다.

동기화 그룹은 다음 이유 중 하나로 인해 변경 내용을 적용하지 못할 수 있습니다.

  • 테이블 간 스키마 비호환성.
  • 테이블 간 데이터 비호환성.
  • null 값을 허용하지 않는 열에 null 값이 있는 행 삽입.
  • 외래 키 제약 조건을 위반하는 값으로 행 업데이트.

동기화 그룹이 만료되지 않게 하려면:

  • 실패한 행에 포함된 값을 허용하도록 스키마를 업데이트합니다.
  • 실패한 행에 포함된 값을 포함하도록 외래 키 값을 업데이트합니다.
  • 대상 데이터베이스의 스키마 또는 외래 키와 호환되도록 실패한 행의 데이터 값을 업데이트합니다.

프로비전 해제 문제 방지

경우에 따라 클라이언트 에이전트를 사용하여 데이터베이스를 등록 취소할 경우 동기화에 실패할 수 있습니다.

시나리오

  1. 로컬 에이전트 1과 연결되는 SQL Database 인스턴스 및 SQL Server 데이터베이스를 사용하여 동기화 그룹 A를 만들었습니다.
  2. 동일한 온-프레미스 데이터베이스가 로컬 에이전트 2(이 에이전트는 어떠한 동기화 그룹에도 연결되지 않음)로 등록됩니다.
  3. 로컬 에이전트 2에서 온-프레미스 데이터베이스를 등록 취소하면 온-프레미스 데이터베이스에 대한 동기화 그룹 A에 대한 추적 및 메타 테이블이 제거됩니다.
  4. 동기화 그룹 A 작업이 실패하고 "데이터베이스가 동기화를 위해 프로비전되지 않았거나 동기화 구성 테이블에 대한 권한이 없기 때문에 현재 작업을 완료할 수 없습니다." 오류가 발생합니다.

솔루션

이 시나리오를 방지하려면 데이터베이스를 여러 에이전트에 등록하지 마세요.

이 시나리오에서 복구하려면 다음을 수행합니다.

  1. 데이터베이스가 속한 각 동기화 그룹에서 데이터베이스를 제거합니다.
  2. 데이터베이스를 제거한 각 동기화 그룹에 다시 추가합니다.
  3. 영향을 받는 각 동기화 그룹을 배포합니다(이 작업으로 데이터베이스를 프로비전함).

동기화 그룹 수정

데이터베이스를 동기화 그룹에서 제거한 다음, 변경 내용 중 하나가 먼저 배포되기 전에는 동기화 그룹을 편집하지 마세요.

대신 먼저 동기화 그룹에서 데이터베이스를 제거합니다. 그런 다음, 변경 사항을 배포하고 프로비전 해제가 완료되기를 기다립니다. 프로비전 해제가 완료되면 동기화 그룹을 편집하고 변경 내용을 배포할 수 있습니다.

데이터베이스를 제거하고 변경 내용 중 하나를 먼저 배포하지 않고 동기화 그룹을 편집하는 경우 하나 또는 다른 작업이 실패합니다. 포털 인터페이스가 일치하지 않을 수 있습니다. 이 경우 페이지를 새로 고쳐 올바른 상태를 복원합니다.

스키마 새로 고침 제한 시간 초과 방지

복잡한 스키마를 동기화하는 경우 동기화 메타데이터 데이터베이스에서 SKU가 낮은 경우(예: 기본) 스키마 새로 고침 중에 "작업 제한 시간 초과"가 발생할 수 있습니다.

솔루션

이 문제를 완화하려면 동기화 메타데이터 데이터베이스 리소스의 크기를 조정하는 것이 좋습니다.

다음 단계

SQL 데이터 동기화에 대한 자세한 내용은 다음을 참조하세요.

SQL Database에 대한 자세한 내용은 다음을 참조하세요.