Delen via


Een partitiefunctie wijzigen

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

U kunt de manier wijzigen waarop een tabel of index wordt gepartitioneerd in SQL Server, Azure SQL Database en Azure SQL Managed Instance door het aantal opgegeven partities in stappen van 1 toe te voegen of af te trekken in de partitiefunctie van de gepartitioneerde tabel of index met behulp van Transact-SQL. Wanneer u een partitie toevoegt, doet u dit door een bestaande partitie te splitsen in twee partities en de grenzen van de nieuwe partities opnieuw te definiëren. Wanneer u een partitie verwijdert, doet u dit door de grenzen van twee partities samen te voegen in één partitie. Met deze laatste actie wordt de ene partitie opnieuw ingevuld en blijft de andere partitie onafgehandeld. Bekijk aanbevolen procedures voordat u een partitiefunctie wijzigt.

Voorzichtigheid

Meerdere tabellen of indexen kunnen dezelfde partitiefunctie gebruiken. Wanneer u een partitiefunctie wijzigt, is dit van invloed op alle functies in één transactie. Controleer de afhankelijkheden van de partitiefunctie voordat u deze wijzigt.

Tabelpartitionering is ook beschikbaar in toegewezen SQL-pools in Azure Synapse Analytics, met enkele syntaxisverschillen. Meer informatie vindt u in Partitioneringstabellen in toegewezen SQL-pool.

Beperkingen

  • ALTER PARTITION FUNCTION kan alleen worden gebruikt voor het splitsen van één partitie in twee, of voor het samenvoegen van twee partities in één. Als u de manier wilt wijzigen waarop een tabel of index wordt gepartitioneerd (bijvoorbeeld van 10 partities naar 5), kunt u een van de volgende opties gebruiken:

    • Maak een nieuwe gepartitioneerde tabel met de gewenste partitiefunctie en voeg vervolgens de gegevens uit de oude tabel in de nieuwe tabel in met behulp van een INSERT INTO ... SELECT FROM Transact-SQL statement or the Manage Partition Wizard in SQL Server Management Studio (SSMS).

    • Maak een gepartitioneerde geclusterde index op een heap.

      Notitie

      Het verwijderen van een gepartitioneerde geclusterde index resulteert in een gepartitioneerde heap.

    • Verwijder een bestaande gepartitioneerde index en bouw deze opnieuw met behulp van de instructie Transact-SQL CREATE INDEX met de component DROP EXISTING = ON.

    • Voer een reeks ALTER PARTITION FUNCTION-instructies uit.

  • De database-engine biedt geen replicatieondersteuning voor het wijzigen van een partitiefunctie. Als u wijzigingen wilt aanbrengen in een partitiefunctie in de publicatiedatabase, moet u dit handmatig doen in de abonnementsdatabase.

  • Alle bestandsgroepen die worden beïnvloed door ALTER PARTITION FUNCTION moeten online zijn.

Machtigingen

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.

Query's uitvoeren op gepartitioneerde objecten in een database

De volgende query bevat alle gepartitioneerde objecten in een database. Dit kan worden gebruikt om de afhankelijkheden voor een partitiefunctie te controleren voordat u deze wijzigt.

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;

Een partitie splitsen met Transact-SQL

  1. Maak in Objectverkennerverbinding met uw doeldatabase.

  2. Selecteer op de standaardbalk Nieuwe query.

  3. Kopieer en plak het volgende voorbeeld in het queryvenster en selecteer uitvoeren.

    Dit voorbeeld:

    • Controleert op een eerdere versie van de partitiefunctie myRangePF1 en verwijdert deze als deze wordt gevonden.
    • Hiermee maakt u een partitiefunctie met de naam myRangePF1 die een tabel partitioneert in vier partities.
    • Splitst de partitie tussen boundary_values 100 en 1000 om een partitie te maken tussen boundary_values 100 en 500 en een partitie tussen boundary_values 500 en 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);  
    

Twee partities samenvoegen met Transact-SQL

  1. Maak in Objectverkennerverbinding met uw doeldatabase.

  2. Selecteer op de standaardbalk Nieuwe query.

  3. Kopieer en plak het volgende voorbeeld in het queryvenster en selecteer uitvoeren.

    Dit voorbeeld:

    • Controleert of een eerdere versie van de partitiefunctie myRangePF1 bestaat en verwijdert deze als deze wordt gevonden.
    • Hiermee maakt u een partitiefunctie met de naam myRangePF1 met drie grenswaarden, wat resulteert in vier partities.
    • Hiermee wordt de partitie tussen boundary_values 1 en 100 samengevoegd met de partitie tussen boundary_values 100 en 1000.
    • Dit resulteert in de partitiefunctie myRangePF1 met de twee grenspunten, 1 en 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);  
    

Een partitiefunctie verwijderen met SSMS

  1. Maak in Objectverkennerverbinding met uw doeldatabase.

  2. Vouw de database uit waarin u de partitiefunctie wilt verwijderen en vouw vervolgens de map Storage uit.

  3. Vouw de map Partition Functions uit.

  4. Klik met de rechtermuisknop op de partitiefunctie die u wilt verwijderen en selecteer Verwijderen.

  5. Controleer in het dialoogvenster Object verwijderen of de juiste partitiefunctie is geselecteerd en selecteer OK.

Volgende stappen

Meer informatie over gerelateerde concepten vindt u in de volgende artikelen: