Sdílet prostřednictvím


FUNKCE ROZDĚLENÍ ALTER (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL databáze v Microsoft Fabric

Mění partiční funkci rozdělením nebo sloučením jejích okrajových hodnot. Spuštění příkazu ALTER PARTITION FUNCTION může rozdělit jednu tabulku nebo indexovou partition, která používá partition funkci, na dvě partition. Tvrzení také může sloučit dvě partition do jedné partition.

Upozornění

Stejnou funkci oddílu může použít více tabulek nebo indexů. FUNKCE ZMĚNY ROZDĚLENÍ ovlivňuje všechny tyto funkce v jedné transakci.

Transact-SQL konvence syntaxe

Syntaxe

  
ALTER PARTITION FUNCTION partition_function_name()  
{   
    SPLIT RANGE ( boundary_value )  
  | MERGE RANGE ( boundary_value )   
} [ ; ]  

Arguments

partition_function_name
je název partition funkce, kterou je třeba upravit.

ROZDĚLENÝ ROZSAH ( boundary_value )
Přidává jednu oddíl do funkce oddílu. boundary_value určuje rozsah nového rozkladu a musí se lišit od stávajících okrajových rozsahů funkce rozkladu. Na základě boundary_value databázový engine rozděluje jeden z existujících rozsahů na dvě. Z těchto dvou oblastí je ten s novou boundary_value novou partition.

Souborová skupina musí existovat online. A schéma oddílů, které používá oddílovou funkci jako NEXT USED pro uložení nové oddílu, musí označit souborovou skupinu. Příkaz CREATE PARTITION SCHEME přiřazuje souborové skupiny k oddílům. Příkaz CREATE PARTITION FUNCTION vytváří méně oddílů než souborové skupiny, které je uchovávají. Příkaz CREATE PARTITION SCHEME může vyčlenit více skupin souborů, než je potřeba. Pokud se to stane, skončíte s nepřiřazenými souborovými skupinami. Schéma rozdělení také označuje jednu ze skupin souborů jako NEXT USED. Tato skupina souborů uchovává novou partition. Pokud nejsou žádné souborové skupiny, které schéma oddílu označí jako NEXT USED, musíte použít příkaz ALTER PARTITION SCHEME.

Příkaz ALTER PARTITION SCHEME může buď přidat souborovou skupinu, nebo vybrat existující, aby uchovával novou partition. Můžete přiřadit souborovou skupinu, která už obsahuje oddíly, aby uchovávala další oddíly. Funkce oddílu se může účastnit více než jednoho rozkladového schématu. Z tohoto důvodu musí mít všechna schémata oddílů, která používají funkci oddílu, do které přidáváte oddíly. Jinak příkaz ALTER PARTITION FUNCTION selže chybou, která zobrazí schéma oddílů nebo schémata bez souboru NEXT USED.

Pokud vytvoříte všechny oddíly ve stejné skupině souborů, tato skupina je automaticky automaticky přiřazena jako NEXT USED souborová skupina. Po spuštění split operace však již není vybrána souborová skupina NEXT USED. Explicitně přiřaďte souborovou skupinu jako NEXT USED souborovou skupinu pomocí ALTER PARTITION SCHEME, jinak nadcházející operace rozdělení selže.

Poznámka:

Omezení indexu columnstore: Pouze prázdné oddíly lze rozdělit, pokud na tabulce existuje index columnstore. Před touto operací budete muset index columnstore vyřadit nebo deaktivovat.

MERGE [ RANGE ( boundary_value) ]
Zruší oddíl a všechny hodnoty v oddílu sloučí do zbývajícího oddílu. RANGE (boundary_value) musí být existující okrajová hodnota rozdělení, které má být vyřazeno. Tento argument odstraní souborovou skupinu, která původně obsahovala boundary_value , ze schématu oddílu, pokud ji nepoužívá zbývající oddíl nebo ji neoznačí vlastností NEXT USED. Sloučená partition existuje ve skupině souborů, která boundary_value zpočátku neobsahovala. boundary_value je konstantní výraz, který může odkazovat na proměnné (včetně uživatelsky definovaných typových proměnných) nebo funkce (včetně uživatelem definovaných funkcí). Nemůže odkazovat na Transact-SQL výraz. boundary_value musí buď odpovídat, nebo být implicitně převeditelný na typ dat odpovídajícího sloupce pro rozdělení. Také nemůžete boundary_value při implicitní konverzi zkracovat tak, že velikost a měřítko hodnoty neodpovídaly odpovídající input_parameter_type.

Poznámka:

Omezení indexu columnstore: Dva neprázdné oddíly obsahující index columnstore nelze sloučit. Před touto operací budete muset index columnstore vyřadit nebo deaktivovat

Osvědčené postupy

Vždy mějte prázdné oddíly na obou koncích rozsahu rozdělení. Nechte oddíly na obou koncích, abyste zajistili, že rozdělení a sloučení oddílů nezpůsobí žádný přesun dat. Rozdělení oddílu probíhá na začátku a sloučení oddílů na konci. Vyhněte se rozdělení nebo slučování populovaných oddílů. Rozdělení nebo slučování populovaných oddílů může být neefektivní. Mohou být neefektivní, protože rozdělení nebo sloučení může způsobit až čtyřnásobnou generaci logů a také způsobit výrazné zablokování.

Hlavním důvodem, proč umisťujete oddíly do více skupin souborů, je zajistit, abyste mohli samostatně provádět zálohování a obnovu oddílů. Přečtěte si další informace o skupinách souborů a strategiích dělení v souborových skupin.

Limitace a omezení

ALTER PARTITION FUNCTION přerozděluje všechny tabulky a indexy, které funkci používají v jedné atomické operaci. Tato operace však probíhá offline a v závislosti na rozsahu přerozdělení může být náročná na zdroje.

ALTER PARTITION FUNCTION používejte pouze pro rozdělení jedné partition na dvě nebo sloučení dvou partition do jedné. Chcete-li změnit jinou stranu tabulky (například z 10 oddílů na pět), použijte některou z následujících možností. V závislosti na konfiguraci vašeho systému se tyto možnosti mohou lišit ve spotřebě zdrojů:

  • Vytvořte novou rozdělenou tabulku s potřebnou funkcí oddílu. Poté vložte data ze staré tabulky do nové tabulky pomocí INSERT INTO... VYBRAT OD.

  • Vytvořte rozdělený clusterovaný index na haldě.

    Poznámka:

    Odstranění děleného clusterovaného indexu má za následek dělenou haldu.

  • Odstraňte a znovu sestavte existující rozdělený index pomocí příkazu CREATE INDEX Transact-SQL s klauzulí DROP EXISTENT = ON.

  • Spusť sekvenci příkazů ALTER PARTITION FUNCTION.

Všechny skupiny souborů ovlivněné funkcí ALTER PARTITION FUNCTION musí být online.

FUNKCE ALTER PARTITION selže, pokud existuje deaktivovaný shlukovaný index na jakékoli tabulce používající tuto funkci.

Databázový engine neposkytuje replikaci pro úpravu funkce oddílu. Změny v partition funkci v databázi publikací musí být ručně provedeny v databázi předplatného.

Povolení

Ke spuštění funkce ALTER PARTITION FUNCTION je možné použít některá z následujících oprávnění:

  • Oprávnění ALTER ANY DATASPACE. Toto oprávnění ve výchozím nastavení platí pro členy pevných rolí serveru sysadmin a pevných databázových rolí db_owner a db_ddladmin.

  • OVLÁDÁNÍ nebo ALTER oprávnění k databázi, ve které byla vytvořena partiční funkce.

  • CONTROL SERVER nebo ALTER ANY DATABASE oprávnění na serveru databáze, ve které byla vytvořena funkce oddílu.

Examples

A. Rozdělte oddíl rozdělené tabulky nebo indexu na dvě oddíly

Následující příklad vytvoří funkci oddílu pro rozdělení tabulky nebo indexu do čtyř oddílů. ALTER PARTITION FUNCTION rozdělí jednu z oddílů na dvě, čímž vytvoří celkem pět oddílů.

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  
--Split the partition between boundary_values 100 and 1000  
--to create two partitions between boundary_values 100 and 500  
--and between boundary_values 500 and 1000.  
ALTER PARTITION FUNCTION myRangePF1 ()  
SPLIT RANGE (500);  

B. Sloučení dvou oddílů rozdělené tabulky do jedné části

Následující příklad vytváří stejnou partition funkci jako výše a poté sloučí dvě partition do jedné partition, celkem tedy tři partitiony.

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  
--Merge the partitions between boundary_values 1 and 100  
--and between boundary_values 100 and 1000 to create one partition  
--between boundary_values 1 and 1000.  
ALTER PARTITION FUNCTION myRangePF1 ()  
MERGE RANGE (100);  

Další kroky

Více o dělení tabulek a souvisejících konceptech se dozvíte v následujících článcích: