Udostępnij za pośrednictwem


Modyfikowanie funkcji partycji

Dotyczy:SQL ServerAzure SQL DatabaseAzure 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

  1. W eksploratorze obiektów połącz się z docelową bazą danych.

  2. Na pasku Standardowym wybierz pozycję Nowe zapytanie.

  3. 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);  
    

Scalanie dwóch partycji z Transact-SQL

  1. W eksploratorze obiektów połącz się z docelową bazą danych.

  2. Na pasku Standardowa wybierz pozycję Nowe zapytanie.

  3. 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);  
    

Usuwanie funkcji partycji za pomocą programu SSMS

  1. W eksploratorze obiektów połącz się z docelową bazą danych.

  2. Rozwiń bazę danych, w której chcesz usunąć funkcję partycji, a następnie rozwiń folder Storage.

  3. Rozwiń folder Partition Functions.

  4. Kliknij prawym przyciskiem myszy funkcję partycji, którą chcesz usunąć, a następnie wybierz pozycję Usuń.

  5. 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: