파티션 함수 수정
적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance
Transact-SQL을 사용하여 분할된 테이블 또는 인덱스의 파티션 함수에서 지정된 파티션 수를 1씩 추가하거나 빼서 SQL Server, Azure SQL 데이터베이스, Azure SQL Managed Instance에서 테이블 또는 인덱스가 분할되는 방식을 변경할 수 있습니다. 파티션을 추가할 때 기존 파티션을 두 파티션으로 "분할"하고 새 파티션의 경계를 다시 정의하여 파티션을 추가합니다. 파티션을 삭제할 때 두 파티션의 경계를 하나로 "병합"하여 파티션을 삭제합니다. 이 마지막 작업은 하나의 파티션을 다시 채우고 다른 파티션은 할당되지 않은 상태로 둡니다. 파티션 함수를 수정하기 전에 모범 사례를 검토합니다.
주의
둘 이상의 테이블 또는 인덱스가 같은 파티션 함수를 사용할 수 있습니다. 파티션 함수를 수정하면 단일 트랜잭션에 있는 모든 대상에 영향을 줍니다. 파티션 함수를 수정하기 전에 파티션 함수의 종속성을 확인합니다.
테이블 분할은 몇 가지 구문 차이와 함께 Azure Synapse Analytics의 전용 SQL 풀에서도 사용할 수 있습니다. 자세한 내용은 전용 SQL 풀의 테이블 분할을 참조하세요.
제한 사항
ALTER PARTITION FUNCTION은 하나의 파티션을 둘로 나누거나 두 개의 파티션을 하나로 병합하는 데만 사용합니다. 10개의 파티션을 5개로 줄이는 것과 같이 테이블이나 인덱스가 분할되는 방식을 변경하려면 다음 옵션 중 하나를 사용합니다.
원하는 파티션 함수를 사용하여 분할된 새 테이블을 만든 다음 INSERT INTO ... SELECT FROM Transact-SQL 문 또는 SSMS(SQL Server Management Studio)의 파티션 관리 마법사를 사용하여 이전 테이블의 데이터를 새 테이블에 삽입합니다.
힙에 분할된 클러스터형 인덱스를 만듭니다.
참고
분할된 클러스터형 인덱스를 삭제하면 힙이 분할됩니다.
Transact-SQL CREATE INDEX 문에 DROP EXISTING = ON 절을 사용하여 기존의 분할된 인덱스를 삭제하고 다시 작성합니다.
ALTER PARTITION FUNCTION 문의 시퀀스를 실행합니다.
데이터베이스 엔진에서는 파티션 함수 수정을 위한 복제 지원을 제공하지 않습니다. 게시 데이터베이스의 파티션 함수를 변경하려면 구독 데이터베이스에서 직접 파티션 함수를 수정해야 합니다.
ALTER PARTITION FUNCTION의 영향을 받는 모든 파일 그룹이 온라인 상태여야 합니다.
사용 권한
ALTER PARTITION FUNCTION을 실행하려면 다음 중 하나의 권한이 필요합니다.
ALTER ANY DATASPACE 권한. 이 권한은 기본적으로 sysadmin 고정 서버 역할 및 db_owner 및 db_ddladmin 고정 데이터베이스 역할의 멤버에게 부여됩니다.
파티션 함수가 생성된 데이터베이스에 대한 CONTROL 또는 ALTER 권한
파티션 함수가 생성된 데이터베이스의 서버에 대한 CONTROL SERVER 또는 ALTER ANY DATABASE 권한
데이터베이스에서 분할된 개체 쿼리
다음 쿼리는 데이터베이스의 분할된 모든 개체를 나열합니다. 이를 사용하여 파티션 함수를 수정하기 전에 파티션 함수의 종속성을 확인할 수 있습니다.
SELECT
PF.name AS PartitionFunction,
ds.name AS PartitionScheme,
OBJECT_SCHEMA_NAME(si.object_id) as SchemaName,
OBJECT_NAME(si.object_id) AS PartitionedTable,
si.name as IndexName
FROM sys.indexes AS si
JOIN sys.data_spaces AS ds
ON ds.data_space_id = si.data_space_id
JOIN sys.partition_schemes AS PS
ON PS.data_space_id = si.data_space_id
JOIN sys.partition_functions AS PF
ON PF.function_id = PS.function_id
WHERE ds.type = 'PS'
AND OBJECTPROPERTYEX(si.object_id, 'BaseType') = 'U'
ORDER BY PartitionFunction, PartitionScheme, SchemaName, PartitionedTable;
Transact-SQL을 사용하여 파티션 분할
개체 탐색기에서 대상 데이터베이스에 연결합니다.
표준 도구 모음에서 새 쿼리를 선택합니다.
다음 예제를 복사하여 쿼리 창에 붙여넣고 실행을 선택합니다.
이 예제는 다음과 같이 작성되었습니다.
- 파티션 함수
myRangePF1
의 이전 버전을 확인하고 파티션 함수가 발견되면 삭제합니다. - 테이블을 4개의 파티션으로 분할하는 파티션 함수
myRangePF1
를 만듭니다. - 파티션을 boundary_values 100과 1000 사이로 분할하여 boundary_values 100 및 500 사이의 파티션과 between boundary_values 500 및 1000 사이의 파티션을 만듭니다.
IF EXISTS (SELECT * FROM sys.partition_functions WHERE name = 'myRangePF1') DROP PARTITION FUNCTION myRangePF1; GO CREATE PARTITION FUNCTION myRangePF1 (int) AS RANGE LEFT FOR VALUES ( 1, 100, 1000 ); GO ALTER PARTITION FUNCTION myRangePF1 () SPLIT RANGE (500);
- 파티션 함수
Transact-SQL을 사용하여 두 파티션 병합
개체 탐색기에서 대상 데이터베이스에 연결합니다.
표준 도구 모음에서 새 쿼리를 선택합니다.
다음 예제를 복사하여 쿼리 창에 붙여넣고 실행을 선택합니다.
이 예제는 다음과 같이 작성되었습니다.
- 파티션 함수
myRangePF1
의 이전 버전이 있는지 확인하고 파티션 함수가 발견되면 삭제합니다. - 세 개의 경계 값을 사용하여 파티션 함수
myRangePF1
를 만들면 4개의 파티션이 생성됩니다. - boundary_values 1 및 100 사이의 파티션을 boundary_values 100 및 1,000 사이의 파티션과 병합합니다.
- 이로 인해 파티션 함수
myRangePF1
는 1과 1,000의 두 경계 지점을 갖습니다.
IF EXISTS (SELECT * FROM sys.partition_functions WHERE name = 'myRangePF1') DROP PARTITION FUNCTION myRangePF1; GO CREATE PARTITION FUNCTION myRangePF1 (int) AS RANGE LEFT FOR VALUES ( 1, 100, 1000 ); GO ALTER PARTITION FUNCTION myRangePF1 () MERGE RANGE (100);
- 파티션 함수
SSMS를 사용하여 파티션 함수 삭제
개체 탐색기에서 대상 데이터베이스에 연결합니다.
파티션 함수를 삭제할 데이터베이스를 확장한 다음 Storage 폴더를 확장합니다.
파티션 함수 폴더를 확장합니다.
삭제할 파티션 함수를 마우스 오른쪽 단추로 클릭하고 삭제를 선택합니다.
개체 삭제 대화 상자에서 올바른 파티션 함수가 선택되어 있는지 확인하고 OK를 선택합니다.
다음 단계
다음 문서에서 관련 개념에 대해 자세히 알아보세요.