Modyfikowanie funkcji partycji
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Możesz zmienić sposób partycjonowania tabeli lub indeksu w programie SQL Server, usłudze Azure SQL Database i usłudze Azure SQL Managed Instance, dodając lub odejmując liczbę określonych partycji w przyrostach 1 w funkcji partycji partycjonowanej tabeli lub indeksu przy użyciu języka Transact-SQL. Podczas dodawania partycji należy to zrobić przez "podzielenie" istniejącej partycji na dwie partycje i zdefiniowanie granic nowych partycji. Kiedy usuwasz partycję, robisz to przez "scalenie" granic dwóch partycji w jedną. Ta ostatnia akcja ponownie wypełnia jedną partycję i pozostawia drugą nieprzypisaną. Przed zmodyfikowaniem funkcji partycji przejrzyj najlepsze rozwiązania.
Ostrożność
Więcej niż jedna tabela lub indeks może używać tej samej funkcji partycji. Podczas modyfikowania funkcji partycji wpływasz na wszystkie z nich w jednej transakcji. Przed modyfikacją sprawdź zależności funkcji partycji .
Partycjonowanie tabel jest również dostępne w dedykowanych pulach SQL w usłudze Azure Synapse Analytics z pewnymi różnicami składniowymi. Więcej informacji w Partycjonowanie tabel w dedykowanej puli SQL.
Ograniczenia
Funkcja ALTER PARTITION może służyć tylko do dzielenia jednej partycji na dwie lub scalania dwóch partycji na jedną. Aby zmienić sposób partycjonowania tabeli lub indeksu (na przykład z 10 partycji na 5), możesz użyć dowolnej z następujących opcji:
Utwórz nową tabelę partycjonowaną z żądaną funkcją partycji, a następnie wstaw dane ze starej tabeli do nowej tabeli przy użyciu instrukcji INSERT INTO ... SELECT FROM Transact-SQL statement or the Manage Partition Wizard in SQL Server Management Studio (SSMS).
Utwórz partycjonowany indeks klastrowany na stosie danych.
Notatka
Usunięcie partycjonowanego indeksu klastrowanego powoduje partycjonowaną stertę.
Upuść i ponownie skompiluj istniejący indeks partycjonowany przy użyciu instrukcji Transact-SQL CREATE INDEX z klauzulą DROP EXISTING = ON.
Wykonaj sekwencję instrukcji ALTER PARTITION FUNCTION.
Aparat bazy danych nie zapewnia obsługi replikacji na potrzeby modyfikowania funkcji partycji. Jeśli chcesz wprowadzić zmiany w funkcji partycji w bazie danych publikacji, należy to zrobić ręcznie w bazie danych subskrypcji.
Wszystkie grupy plików, których dotyczy funkcja ALTER PARTITION, muszą być w trybie online.
Uprawnienia
Jedną z następujących uprawnień można użyć do wykonania funkcji ALTER PARTITION:
ALTER ANY DATASPACE permission (ZMIENIANIE UPRAWNIEŃ DO PRZESTRZENI DANYCH). To uprawnienie domyślnie dotyczy członków stałej roli serwera sysadmin oraz stałych ról bazy danych db_owner i db_ddladmin.
UPRAWNIENIE CONTROL lub ALTER w bazie danych, w której utworzono funkcję partycji.
CONTROL SERVER lub ALTER ANY DATABASE uprawnienie na serwerze bazy danych, w której utworzono funkcję partycji.
Wykonywanie zapytań dotyczących partycjonowanych obiektów w bazie danych
Poniższe zapytanie zawiera listę wszystkich partycjonowanych obiektów w bazie danych. Może to służyć do sprawdzania zależności dla funkcji partycji przed jej zmodyfikowaniem.
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;
Podziel partycję za pomocą Transact-SQL
W eksploratorze obiektów połącz się z docelową bazą danych.
Na pasku Standardowym wybierz pozycję Nowe zapytanie.
Skopiuj poniższy przykład i wklej go w oknie zapytania, a następnie wybierz pozycję Wykonaj.
Ten przykład:
- Sprawdza poprzednią wersję funkcji partycji
myRangePF1
i usuwa ją, jeśli zostanie znaleziona. - Tworzy funkcję partycji o nazwie
myRangePF1
, która dzieli tabelę na cztery partycje. - Dzieli partycję między boundary_values 100 a 1000, aby utworzyć partycję między boundary_values 100 a 500 a partycją między boundary_values 500 a 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);
- Sprawdza poprzednią wersję funkcji partycji
Scalanie dwóch partycji z Transact-SQL
W eksploratorze obiektów połącz się z docelową bazą danych.
Na pasku Standardowa wybierz pozycję Nowe zapytanie.
Skopiuj poniższy przykład i wklej go w oknie zapytania, a następnie wybierz pozycję Wykonaj.
Ten przykład:
- Sprawdza, czy poprzednia wersja funkcji partycji
myRangePF1
istnieje i usuwa ją, jeśli zostanie znaleziona. - Tworzy funkcję partycji o nazwie
myRangePF1
z trzema wartościami granic, co spowoduje utworzenie czterech partycji. - Łączy partycję pomiędzy boundary_values 1 a 100 z partycją pomiędzy boundary_values 100 a 1,000.
- Powoduje to, że funkcja partycji
myRangePF1
mieć dwa punkty graniczne, 1 i 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 () MERGE RANGE (100);
- Sprawdza, czy poprzednia wersja funkcji partycji
Usuwanie funkcji partycji za pomocą programu SSMS
W eksploratorze obiektów połącz się z docelową bazą danych.
Rozwiń bazę danych, w której chcesz usunąć funkcję partycji, a następnie rozwiń folder Storage.
Rozwiń folder Partition Functions.
Kliknij prawym przyciskiem myszy funkcję partycji, którą chcesz usunąć, a następnie wybierz pozycję Usuń.
W oknie dialogowym Usuń obiekt upewnij się, że wybrano prawidłową funkcję partycji, a następnie wybierz pozycję OK.
Następne kroki
Dowiedz się więcej o powiązanych pojęciach w następujących artykułach: