Sdílet prostřednictvím


Upravit funkci oddílu

platí pro:SQL ServerAzure SQL Databaseazure SQL Managed Instance

Způsob dělení tabulky nebo indexu můžete změnit v SQL Serveru, Azure SQL Database a Azure SQL Managed Instance přidáním nebo odečtením zadaného počtu oddílů v přírůstcích po 1, ve funkci oddílu dělené tabulky nebo indexu pomocí jazyka Transact-SQL. Když přidáte oddíl, provedete to tak, že existující oddíl rozdělíte do dvou oddílů a předefinujete hranice nových oddílů. Když oddíl odstraníte, provedete to tím, že sloučíte hranice dvou oddílů do jednoho. Tato poslední akce znovu naplní jednu přihrádku a ponechá druhou přihrádku nepřiřazenou. Přehodnoťte osvědčené postupy před úpravou funkce oddílu.

Opatrnost

Stejnou funkci oddílu může použít více tabulek nebo indexů. Při úpravě funkce oddílu ovlivníte všechny v jedné transakci. Před úpravou zkontrolujte závislosti funkce oddílu .

Dělení tabulek je k dispozici také ve vyhrazených fondech SQL ve službě Azure Synapse Analytics s některými rozdíly v syntaxi. Další informace najdete v Dělení tabulek ve vyhrazeném fondu SQL.

Omezení

  • FUNKCI ALTER PARTITION LZE použít pouze pro rozdělení jednoho oddílu na dva nebo pro sloučení dvou oddílů do jednoho. Pokud chcete změnit způsob dělení tabulky nebo indexu (například z 10 oddílů na 5), můžete použít některou z následujících možností:

    • Vytvořte novou dělenou tabulku s požadovanou partition funkci a vložte data ze staré tabulky do nové tabulky pomocí příkazu INSERT INTO ... SELECT FROM Transact-SQL nebo Průvodce správou oddílů v SQL Server Management Studio (SSMS).

    • V haldě vytvořte dělený clusterovaný index.

      Poznámka

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

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

    • Proveďte posloupnost příkazů ALTER PARTITION FUNCTION.

  • Databázový stroj neposkytuje podporu replikace pro úpravu funkce oddílu. Pokud chcete provést změny funkce oddílu v databázi publikace, musíte to udělat ručně v databázi odběratelů.

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

Dovolení

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.

Dotazování dělených objektů v databázi

Následující dotaz zobrazí seznam všech dělených objektů v databázi. Můžete ho použít ke kontrole závislostí pro funkci oddílu před úpravou.

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;

Rozdělte oddíl pomocí Transact-SQL

  1. V Průzkumníku objektůpřipojte se k cílové databázi.

  2. Na panelu Standard vyberte Nový dotaz.

  3. Zkopírujte a vložte následující příklad do okna dotazu a vyberte Spustit.

    Tento příklad:

    • Zkontroluje předchozí verzi funkce oddílu myRangePF1 a odstraní ji, pokud je nalezena.
    • Vytvoří funkci dělení s názvem myRangePF1, která rozdělí tabulku do čtyř oddílů.
    • Rozdělí oddíl mezi hraniční_hodnoty 100 a 1000 a vytvoří oddíl mezi hraniční_hodnoty 100 a 500 a další oddíl mezi hraniční_hodnoty 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);  
    

Sloučit dva oddíly s Transact-SQL

  1. V Průzkumníku objektů se připojte k cílové databázi.

  2. Na panelu Standard vyberte Nový dotaz.

  3. Zkopírujte a vložte následující příklad do okna dotazu a vyberte Spustit.

    Tento příklad:

    • Zkontroluje, jestli existuje předchozí verze funkce oddílu myRangePF1 a pokud je nalezena, odstraní ji.
    • Vytvoří funkci oddílu s názvem myRangePF1 se třemi hodnotami hranic, což bude mít za následek čtyři oddíly.
    • Sloučí oblast mezi hodnotami na hranicích 1 a 100 s oblastí mezi hodnotami na hranicích 100 a 1 000.
    • Výsledkem je, že funkce oddílu myRangePF1 má dva hraniční body, 1 a 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);  
    

Odstranění funkce oddílu pomocí SSMS

  1. V Průzkumníku objektůse připojte k cílové databázi.

  2. Rozbalte databázi, ze které chcete odstranit funkce oddílu, a potom rozbalte složku Storage.

  3. Otevřete složku Funkcí rozdělení.

  4. Klikněte pravým tlačítkem myši na funkci oddílu, kterou chcete odstranit, a vyberte Odstranit.

  5. V dialogovém okně Odstranit objekt zkontrolujte, zda je vybraná správná funkce oddílu, a pak vyberte OK.

Další kroky

Další informace o souvisejících konceptech najdete v následujících článcích: