Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-database in Microsoft Fabric
Verandert een partitiefunctie door de grenswaarden te splitsen of samen te voegen. Het uitvoeren van een ALTER PARTITION FUNCTION-instructie kan één tabel of indexpartitie die de partitiefunctie gebruikt splitsen in twee partities. De instructie kan ook twee partities samenvoegen tot één partitie.
Waarschuwing
Meerdere tabellen of indexen kunnen dezelfde partitiefunctie gebruiken. DE FUNCTIE 'ALTER PARTITION' beïnvloedt ze allemaal in één transactie.
Transact-SQL syntaxis-conventies
Syntaxis
ALTER PARTITION FUNCTION partition_function_name()
{
SPLIT RANGE ( boundary_value )
| MERGE RANGE ( boundary_value )
} [ ; ]
Arguments
partition_function_name
Is de naam van de partitiefunctie die aangepast moet worden.
SPLIT RANGE ( boundary_value )
Voegt één partitie toe aan de partitiefunctie.
boundary_value bepaalt het bereik van de nieuwe partitie, en moet verschillen van de bestaande randbereiken van de partitiefunctie. Op basis van boundary_value splitst de database-engine een van de bestaande bereiken in twee. Van deze twee bereiken is de nieuwe boundary_value de nieuwe opdeling.
Een bestandsgroep moet online bestaan. En het partitieschema dat de partitiefunctie als NEXT USED gebruikt om de nieuwe partitie vast te houden, moet de bestandsgroep markeren. Een CREATE PARTITION SCHEME-instructie wijst bestandsgroepen toe aan partities. De CREATE PARTITION FUNCTION instructie maakt minder partities dan bestandsgroepen om ze te bewaren. Een create partition scheme-instructie kan meer bestandsgroepen apart zetten dan nodig is. Als dat gebeurt, krijg je ongeassigneerde bestandsgroepen. Ook markeert het partitieschema een van de bestandsgroepen als VOLGENDE GEBRUIKT. Deze bestandsgroep bevat de nieuwe partitie. Als er geen bestandsgroepen zijn die het partitieschema als NEXT USED markeert, moet je een ALTER PARTITION SCHEME statement gebruiken.
De ALTER PARTITION SCHEME instructie kan ofwel een bestandsgroep toevoegen, of een bestaande selecteren om de nieuwe partitie te bevatten. Je kunt een bestandsgroep die al partities bevat toewijzen om extra partities te bevatten. Een partitiefunctie kan deelnemen aan meer dan één partitieschema. Om deze reden moeten alle partitieschema's die de partitiefunctie gebruiken waaraan je partities toevoegt, een NEXT USED bestandsgroep hebben. Anders faalt de ALTER PARTITION FUNCTION-instructie met een foutmelding die het partitieschema of schema's toont die geen NEXT USED bestandsgroep hebben.
Als je alle partities in dezelfde bestandsgroep aanmaakt, wordt die bestandsgroep automatisch toegewezen als de NEXT USED bestandsgroep. Echter, nadat een gesplitste operatie is uitgevoerd, is er geen geselecteerde NEXT USED bestandsgroep meer. Wijs de bestandsgroep expliciet toe als de NEXT USED filegroup door ALTER PARTITION SCHEME te gebruiken, anders faalt een aankomende split-operatie.
Opmerking
Beperkingen met columnstore-index: Alleen lege partities kunnen worden opgesplitst wanneer er een columnstore-index in de tabel bestaat. Je zult de columnstore-index moeten verwijderen of uitschakelen voordat je deze bewerking uitvoert.
SAMENVOEGEN [ BEREIK ( boundary_value) ]
Verwijdert een partitie en voegt alle waarden die in de partitie bestaan samen met een overgebleven partitie. RANGE (boundary_value) moet een bestaande randwaarde zijn van de partition die wordt weggelaten. Dit argument verwijdert de bestandsgroep die oorspronkelijk boundary_value bevatte uit het partitieschema, tenzij een resterende partitie deze gebruikt of markeert met de eigenschap NEXT USED. De samengevoegde partitie bestaat in de bestandsgroep die boundary_value aanvankelijk niet bevatte.
boundary_value is een constante expressie die variabelen (inclusief door de gebruiker gedefinieerde typevariabelen) of functies (inclusief door de gebruiker gedefinieerde functies) kan verwijzen. Het kan geen Transact-SQL uitdrukking verwijzen.
boundary_value moet ofwel overeenkomen met of impliciet omgezet kunnen worden naar het datatype van de bijbehorende partitioneringskolom. Je kunt boundary_value ook niet afkorten tijdens impliciete conversie op een manier die de grootte en schaal van de waarde niet overeenkomen met die van de bijbehorende input_parameter_type.
Opmerking
Beperkingen van columnstore-index: Twee niet-lege partities met een columnstore-index kunnen niet worden samengevoegd. Je zult de columnstore-index moeten verwijderen of uitschakelen voordat je deze bewerking uitvoert
Beste praktijken
Houd altijd lege partities aan beide uiteinden van het partitiebereik. Houd de partities aan beide uiteinden om te garanderen dat de partitiesplitsing en de partitiesamenvoeging geen databeweging veroorzaken. De partitiesplitsing vindt plaats aan het begin en de partitiesamenvoeging vindt aan het einde plaats. Vermijd het splitsen of samenvoegen van populated partities. Het splitsen of samenvoegen van populated partities kan inefficiënt zijn. Ze kunnen inefficiënt zijn omdat de splitsing of samenvoeging tot wel vier keer meer loggeneratie kan veroorzaken, en ook ernstige vergrendeling kan veroorzaken.
De belangrijkste reden om je partities op meerdere bestandsgroepen te plaatsen is om ervoor te zorgen dat je onafhankelijk back-up- en hersteloperaties op partities kunt uitvoeren. Meer informatie over bestandsgroepen en partitioneringsstrategieën in Bestandsgroepen.
Beperkingen en beperkingen
DE ALTER PARTITION FUNCTION partitioneert alle tabellen en indexen die de functie gebruiken in één atomaire bewerking. Deze operatie vindt echter offline plaats en kan, afhankelijk van de mate van herpartitionering, veel middelen kosten.
Gebruik alleen de ALTER PARTITION FUNCTION om één partitie in twee te splitsen, of om twee partities samen te voegen tot één. Om de manier waarop een tabel anders wordt gepartitioneerd te veranderen (bijvoorbeeld van 10 partitions naar vijf), gebruik een van de volgende opties. Afhankelijk van de configuratie van uw systeem kunnen deze opties variëren in het resourceverbruik:
Maak een nieuwe gepartitioneerde tabel aan met de benodigde partitiefunctie. Voeg vervolgens de gegevens uit de oude tabel in de nieuwe tabel door een INSERT INTO... SELECT FROM statement.
Maak een gepartitioneerde geclusterde index op een heap.
Opmerking
Het verwijderen van een gepartitioneerde geclusterde index resulteert in een gepartitioneerde heap.
Drop en bouw een bestaande gepartitioneerde index opnieuw op door de Transact-SQL CREATE INDEX-instructie te gebruiken met de DROP EXISTING = ON-clausule.
Voer een reeks ALTER PARTITION FUNCTION-instructies uit.
Alle bestandsgroepen die worden beïnvloed door ALTER PARTITION FUNCTION moeten online zijn.
DE PARTITIEFUNCTIE WIJZIGEN faalt wanneer er een uitgeschakelde geclusterde index bestaat op tabellen die de partitiefunctie gebruiken.
De database-engine biedt geen replicatie-ondersteuning voor het aanpassen van een partitiefunctie. Wijzigingen aan een partitiefunctie in de publicatiedatabase moeten handmatig worden toegepast in de abonnementsdatabase.
Permissions
Een van de volgende machtigingen kan worden gebruikt om DE FUNCTIE ALTER PARTITION uit te voeren:
ELKE DATASPACE-machtiging WIJZIGEN. Deze machtiging is standaard ingesteld op leden van de sysadmin vaste serverfunctie en de db_owner en db_ddladmin vaste databaserollen.
Control- of ALTER-machtiging voor de database waarin de partitiefunctie is gemaakt.
CONTROL SERVER- of ALTER ANY DATABASE-machtiging op de server van de database waarin de partitiefunctie is gemaakt.
Voorbeelden
Eén. Splits een partitie van een gepartitioneerde tabel of index in twee partities
In het volgende voorbeeld wordt een partitiefunctie gemaakt om een tabel of index te partitioneren in vier partities.
ALTER PARTITION FUNCTION splitst één van de partities in tweeën om in totaal vijf partities te creëren.
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. Voeg twee partities van een gepartitioneerde tabel samen tot één partitie
Het volgende voorbeeld creëert dezelfde partitiefunctie als hierboven en voegt vervolgens twee van de partities samen tot één partitie, voor in totaal drie partities.
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);
Volgende stappen
Lees meer over tabelpartitionering en gerelateerde concepten in de volgende artikelen:
- `CREATE PARTITION FUNCTION (Transact-SQL)`
- gepartitioneerde tabellen en indexen
- Een partitiefunctie wijzigen
- MAKEN VAN PARTITIESCHEMA (Transact-SQL)
- Een partitieschema wijzigen