ALTER FEDERATION(Azure SQL 데이터베이스)

Azure SQL 데이터베이스에서 페더레이션 내의 데이터 배포를 수정합니다.

중요

현재 페더레이션 구현은 Web 및 Business 서비스 계층에서 폐기됩니다. 확장성, 유연성 및 성능 극대화를 위해 사용자 지정 분할 솔루션을 배포하는 것이 좋습니다.사용자 지정 분할에 대한 자세한 내용은 Azure SQL 데이터베이스 확장을 참조하세요.

Syntax Conventions (SQL Database)

적용 대상: Azure SQL 데이터베이스.

구문

ALTER FEDERATION federation_name
{
    SPLIT AT (distribution_name = boundary_value)
    | DROP AT ([LOW | HIGH] distribution_name = boundary_value)
    | SWITCH OUT AT ([LOW | HIGH] distribution_name = boundary_value)
}[;]

인수

  • federation_name
    변경할 페더레이션의 이름입니다. 이름은 SQL 데이터베이스 내에서 고유해야 하며 식별자 규칙을 따르고 sysname 유형이어야 합니다.

  • distribution_name
    페더레이션 키의 이름입니다. 이름은 페더레이션 키를 참조하는 데 사용된 식별자이며 CREATE TABLE … FEDERATED ON(...) 또는 USE FEDERATION 등의 페더레이션 관련 문으로 참조됩니다. Distribution_name은 식별자 규칙을 따라야 하며 sysname 유형입니다.

    Boundary_value는 분할 작업에 대한 분할점입니다. 경계 값은 페더레이션의 페더레이션 키에 지정된 데이터 형식에 대해 유효한 값이어야 합니다. 분할의 경우 이 값은 이 작업의 일부로 만들어진 새로운 페더레이션 구성원에 대한 range_low 및 range_high가 됩니다.

  • SPLIT AT (distribution_name = boundary_value)
    현재 해당 경계값을 포함하는 페더레이션 구성원의 데이터를 두 명의 새 페더레이션 구성원에게 이동합니다. boundary_value 미만의 페더레이션 키 인스턴스와 연결된 테이블의 모든 행이 새 대상 페더레이션 구성원 중 하나에 복사됩니다. boundary_value보다 크거나 같은 인스턴스는 다른 새로운 페더레이션 구성원으로 복사됩니다. 개체에 정의된 참조 테이블, 저장된 프로시저, 함수, 사용자 및 사용 권한 등의 다른 모든 개체는 새 페더레이션 구성원에 복제됩니다.

  • DROP AT ([LOW | HIGH] distribution_name = boundary_value)
    페더레이션 구성원을 삭제하고 삭제 작업에 의해 만들어진 간격을 채우도록 인접 페더레이션 구성원의 범위를 확장합니다. 이 작업은 삭제되는 페더레이션 구성원과 간격을 채우기 위해 확장된 인접 페더레이션 구성원 모두에게 영향을 미칩니다. 낮음 또는 높음 값은 지정된 페더레이션 boundary_value에서 삭제될 페더레이션 구성원을 결정합니다. 경계값은 페더레이션의 기존 분할값(페더레이션 구성원의 range-high 또는 range-low)과 일치해야 합니다.

    DROP 작업 중에 영향을 받는 페더레이션 구성원 간에는 스키마 비교가 없습니다. DROP AT에는 데이터의 물리적 복사본은 필요하지 않습니다. 구성원에 포함된 데이터는 삭제됩니다. 또한 DROP AT는 연결을 다시 설정하고 영향받는 페더레이션 구성원의 DB_NAME()을 변경합니다.

    DROP AT는 비동기 작업입니다.

  • SWITCH OUT AT ([LOW | HIGH] distribution_name = boundary_value)
    페더레이션 구성원 데이터베이스에서 모든 페더레이션 메타데이터 및 제약 조건을 제거합니다. 실행 후 페더레이션 구성원은 독립 실행형 데이터베이스입니다. SWITCH OUT 중에는 데이터 삭제나 데이터 이동이 없습니다. LOW 또는 HIGH는 지정된 페더레이션 boundary_value의 각 측면에서 외부 전환될 페더레이션 구성원을 결정합니다. 경계 값은 기존 페더레이션의 기존 분할값(range-high 또는 range-low)과 일치해야 합니다. DROP AT과 달리, SWITCH OUT은 작업에 의해 만들어진 간격을 채우기 위해 인접 페더레이션 구성원 범위를 확장하지 않습니다. 페더레이션 응용 프로그램을 Azure SQL 데이터베이스 Elastic Scale로 마이그레이션하려는 경우, 이 명령을 실행하기 전에 먼저 Share Map을 만드세요.

    경고

    SWITCH OUT 명령은 영구적입니다.한 번 실행되면 USING FEDERATION 문을 사용하여 구성원에 액세스할 수 없으며 데이터베이스를 원래 페더레이션으로 다시 추가할 수 없습니다.이 명령이 실행되는 동안 다른 페더레이션 구성원은 영향을 받지 않습니다.

주의

원본 또는 대상 페더레이션 구성원이 겹치는 경우에 한해 여러 DROP 또는 SPLIT 작업을 동시에 수행할 수 있습니다.

SPLIT 작업의 속성

  • ALTER FEDERATION … SPLIT 문은 일괄 처리의 유일한 문이어야 하며 외부 트랜잭션의 일부일 수 없습니다.

  • ALTER FEDERATION … SPLIT 문은 페더레이션 루트 데이터베이스에 연결되어 있는 동안에만 실행할 수 있습니다.

  • 영향을 받는 페더레이션 구성원을 대상으로 한 번에 한 개의 DROP 또는 SPLIT 명령만 활성화할 수 있습니다. 페더레이션의 여러 구성원을 대상으로 작업 중인 경우에는 한 번에 여러 개의 DROP 및 SPLIT 명령이 활성화될 수 있습니다.

  • 모든 대상 페더레이션 구성원(분할 작업으로 만들어진 페더레이션 구성원)는 원본 페더레이션 구성원의 MAXSIZE 및 EDITION 속성을 상속합니다.

  • SPLIT 작업은 원자성 작업입니다. SPLIT을 완료하려면 모든 대상 구성원을 만들어 동기화해야 합니다.

  • 분할 작업은 비동기 작업입니다.

    분할을 실행하는 동안

    • 모든 일반(페더레이션되지 않음) 개체, 스키마 및 시스템 메타데이터는 대상 페더레이션 구성원으로 분할되고 원본 페더레이션 구성원에서 복사됩니다. 이 목록에는 사용자, 역할, 개체 사용 권한, 저장된 프로시저, 뷰, 페더레이션 또는 참조 테이블, 인덱스 등이 포함됩니다. 유일한 예외는 다시 계산으로 표시된 배포 통계입니다. NORECOMPUTE로 표시된 통계는 유지되고 다시 분할 작업 후 연결된 테이블에 대해서는 다시 계산이 수행되지 않습니다.

    • 연결된 모든 테이블 스키마는 대상 페더레이션 구성원으로 분할된 원본 페더레이션 구성원에서 복사됩니다.

    • 연결된 테이블의 사용자 데이터는 경계값을 기준으로 대상 페더레이션 구성원으로 이동됩니다.

    • 모든 참조 테이블의 사용자 데이터는 복제된 다음에 대상 페더레이션 구성원으로 이동합니다.

    분할 완료 시

    • 새 페더레이션 구성원에는 해당 대상 페더레이션 구성원의 모든 최신 데이터가 들어 있습니다.

    • Sys.federation_members 뷰는 해당 범위값으로 새 대상 페더레이션 구성원을 포함하도록 업데이트됩니다. 원본 페더레이션 구성원은 삭제되고 sys.databases 또는 sys.federation_members는 더 이상 존재하지 않습니다.

    • 원본이 지정된 페더레이션 구성원에 대한 모든 기존 연결은 끊어집니다. 다시 시도, 새 연결 시 새 페더레이션 구성원으로 라우팅됩니다.

삭제 작업의 속성

  • ALTER FEDERATION … DROP 문은 일괄 처리의 유일한 문이어야 하며 외부 트랜잭션의 일부일 수 없습니다.

  • ALTER FEDERATION … DROP 문은 페더레이션 루트 데이터베이스에 연결되어 있는 동안에만 실행할 수 있습니다.

  • 지정되는 경계값은 페더레이션의 기존 범위 경계(range_high, range_low)와 일치해야 합니다.

  • 삭제 작업은 비동기 작업입니다.

    DROP 작업이 시작되면 낮은 또는 높은 옵션과 지정된 경계값이 삭제할 페더레이션 구성원을 결정합니다. 인접 페더레이션 구성원은 삭제된 페더레이션 구성원의 범위를 포함하도록 확장됩니다.

    삭제 작업이 실행되는 동안에는 데이터 전송 및 스키마 비교 작업이 수행되지 않습니다.

    삭제 완료 시

    • 나머지 페더레이션 구성원의 이름이 변경됩니다.

    • Sys.federation_members 테이블에는 더 이상 삭제된 페더레이션 구성원이 포함되지 않으면 나머지 페더레이션 구성원에 대한 범위가 업데이트됩니다.

    • 페더레이션 구성원에 대한 모든 기존 연결은 끊어집니다. 삭제된 페더레이션 구성원은 더 이상 연결을 수락할 수 없습니다. 나머지 페더레이션 구성원에 대한 모든 기존 연결은 끊어집니다.

SWITCH OUT 작업의 속성

  • SWITCH OUT 작업은 일괄 처리의 유일한 문이어야 하며 외부 트랜잭션의 일부일 수 없습니다.

  • SWITCH OUT 작업은 페더레이션 루트 데이터베이스에 연결되어 있는 동안에만 실행할 수 있습니다.

  • SWITCH OUT 작업은 비동기 작업입니다.

  • 작업이 완료될 때까지 페더레이션 구성원에 대한 새 연결이 차단됩니다.

  • SWITCH OUT 완료 시:

    • master의 sys.databases 테이블이 업데이트되어 데이터베이스가 더 이상 페더레이션 구성원이 아님을 나타냅니다.

    • 페더레이션 구성원에 대한 모든 기존 연결은 끊어집니다. SWITCH OUT 페더레이션 구성원은 USING FEDERATION 명령을 통해 더 이상 연결을 수락하지 않습니다.

    • 대상 데이터베이스 및 페더레이션된 테이블의 모든 페더레이션별 제약 조건이 삭제됩니다.

  • 모든 페더레이션 구성원에 대해 SWITCH OUT 명령을 실행한 후, 페더레이션 및 페더레이션 루트 데이터베이스를 삭제할 수 있습니다.

사용 권한

페더레이션을 만들기, 변경 및 삭제하려면 해당 페더레이션 루트에 연결되어 있어야 하며 서버에서 dbmanager 역할의 구성원여야 합니다. 또한 데이터베이스에 대한 dbo 그룹의 구성원여야 합니다.

SPLIT 및 DROP 문을 실행하려면 원본 페더레이션 구성원과 연결하려는 서버에 대해 CREATE 및 DROP DATABASE 권한이 필요합니다. Azure SQL 데이터베이스에서는 dbmanager 서버 역할의 구성원으로 제한됩니다. 원본 페더레이션 구성원의 소유자는 작업을 실행하는 사용자 계정에 관계없이 대상 페더레이션 구성원의 소유자가 됩니다.

다음 예에서는 SWITCH OUT 작업을 사용하여 경계 값 100의 낮은 쪽에 포함되는 페더레이션 키 99를 포함하는 페더레이션 구성원을 외부 전환합니다.

ALTER FEDERATION CustomerFederation SWITCH OUT AT (LOW cid = 100)

다음 예에서는 단일 구성원 페더레이션에 대해 SWITCH OUT 작업을 사용하여 uniqueidentifier 경계 값 00000000-0000-0000-0000-000000000000의 높은 쪽에서 외부 전환합니다.

ALTER FEDERATION CustomerFederation SWITCH OUT AT (HIGH cid = '00000000-0000-0000-0000-000000000000')
  • DROP AT (LOW distribution_name = boundary_value)

    페더레이션 구성원을 낮은 경계값으로 낮추고 페더레이션 구성원을 높은 경계값으로 확장합니다. 예를 들어 0,100 (db1), 100,200 (db2) 및 200,300 (db3)의 세 페더레이션 구성원을 포함하는 지정된 페더레이션(fed1)에서 ALTER FEDERATION fed1 DROP AT (LOW customer_id=200)을 실행하면 다음을 수행합니다.

    1. DROP db2 및 100,200 사이의 모든 데이터 삭제

    2. db3의 이름을 db4로 변경합니다. Db4의 Dbid는 동일하게 유지됩니다.

    3. 이제 Db4에 100,300 범위가 포함됩니다.

  • DROP AT (HIGH distribution_name = boundary_value)

    페더레이션 구성원을 높은 경계값으로 지정하고 페더레이션 구성원을 낮은 경계값으로 확장합니다. 예를 들어 0,100 (db1), 100,200 (db2) 및 200,300 (db3)의 세 페더레이션 구성원을 포함하는 지정된 페더레이션(fed1)에서 ALTER FEDERATION fed1 DROP AT (HIGH customer_id=200)을 실행하면 다음을 수행합니다.

    1. db3 및 200,300 사이의 모든 데이터 삭제

    2. db2의 이름을 db4로 변경합니다. Db4의 Dbid는 db2와 동일하게 유지됩니다.

    3. 이제 Db4에 100,300 범위가 포함됩니다.

참고 항목

관련 자료

데이터베이스 페더레이션 관리