Upravit funkci oddílu
platí pro:SQL Server
Azure SQL Database
azure 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
V Průzkumníku objektůpřipojte se k cílové databázi.
Na panelu Standard vyberte Nový dotaz.
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);
- Zkontroluje předchozí verzi funkce oddílu
Sloučit dva oddíly s Transact-SQL
V Průzkumníku objektů se připojte k cílové databázi.
Na panelu Standard vyberte Nový dotaz.
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);
- Zkontroluje, jestli existuje předchozí verze funkce oddílu
Odstranění funkce oddílu pomocí SSMS
V Průzkumníku objektůse připojte k cílové databázi.
Rozbalte databázi, ze které chcete odstranit funkce oddílu, a potom rozbalte složku Storage.
Otevřete složku Funkcí rozdělení.
Klikněte pravým tlačítkem myši na funkci oddílu, kterou chcete odstranit, a vyberte Odstranit.
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: