Ändern einer Partitionsfunktion

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance

Sie können die Art und Weise ändern, wie eine Tabelle oder ein Index in SQL Server, Azure SQL-Datenbank und azure SQL Managed Instance partitioniert wird, indem Sie die Anzahl der angegebenen Partitionen in Schritten von 1 in der Partitionsfunktion der partitionierten Tabelle oder des Indexes mithilfe von Transact-SQL hinzufügen oder subtrahieren. Beim Hinzufügen einer Partition "teilen" Sie eine vorhandene Partition "auf" und definieren die Partitionsbegrenzungen erneut. Wenn Sie eine Partition löschen, "führen" Sie die Begrenzungen von zwei Partitionen "zusammen". Diese Aktion füllt eine Partition neu und belässt die andere Partition ohne Zuordnung. Überprüfen Sie bewährte Methoden, bevor Sie eine Partitionsfunktion ändern.

Achtung

Mehrere Tabellen oder Indizes können dieselbe Partitionsfunktion verwenden. Wenn Sie eine Partitionsfunktion ändern, wirkt sich dies auf alle Funktionen einer einzigen Transaktion aus. Überprüfen Sie die Abhängigkeiten der Partitionsfunktion, bevor Sie sie ändern.

Die Tabellenpartitionierung ist auch in dedizierten SQL-Pools in Azure Synapse Analytics mit einigen Syntaxunterschieden verfügbar. Weitere Informationen finden Sie in Partitionierungstabellen im dedizierten SQL-Pool.

Begrenzungen

  • ALTER PARTITION FUNCTION kann nur verwendet werden, um eine Partition in zwei aufzuteilen bzw. um zwei Partitionen in eine zusammenzuführen. Um die Partitionierung von Tabellen bzw. Indizes zu ändern (beispielsweise von 10 in 5 Partitionen), können Sie eine der folgenden Optionen verwenden:

    • Erstellen Sie eine neue partitionierte Tabelle mit der gewünschten Partitionsfunktion, und fügen Sie dann die Daten aus der alten Tabelle in die neue Tabelle ein, indem Sie entweder eine INSERT INTO ... SELECT FROM Transact-SQL-Anweisung oder der Assistent zum Verwalten von Partitionen in SQL Server Management Studio (SSMS).

    • Erstellen Sie einen partitionierten gruppierten Index für einen Heap.

      Hinweis

      Das Löschen eines partitionierten gruppierten Index ergibt einen partitionierten Heap.

    • Legen Sie einen vorhandenen partitionierten Index ab, und erstellen Sie einen vorhandenen partitionierten Index mithilfe der Transact-SQL CREATE INDEX-Anweisung mit der DROP EXISTING = ON-Klausel neu.

    • Führen Sie eine Abfolge von ALTER PARTITION FUNCTION-Anweisungen aus.

  • Das Datenbankmodul bietet keine Replikationsunterstützung zum Ändern einer Partitionsfunktion. Wenn Sie Änderungen an Partitionsfunktionen in der Veröffentlichungsdatenbank vornehmen möchten, müssen Sie diese manuell in der Abonnementdatenbank durchführen.

  • Alle von ALTER PARTITION FUNCTION betroffenen Dateigruppen müssen online sein.

Berechtigungen

Die folgenden Berechtigungen können zum Ausführen von ALTER PARTITION FUNCTION verwendet werden:

  • ALTER ANY DATASPACE-Berechtigung. Diese Berechtigung gilt standardmäßig für Mitglieder der festen Serverrolle sysadmin und für Mitglieder der festen Datenbankrollen db_owner und db_ddladmin .

  • Die Berechtigung CONTROL oder ALTER für die Datenbank, in der die Partitionsfunktion erstellt wurde.

  • Die Berechtigung CONTROL SERVER oder ALTER ANY DATABASE auf dem Server der Datenbank, in der die Partitionsfunktion erstellt wurde.

Abfragen partitionierter Objekte in einer Datenbank

Die folgende Abfrage listet alle partitionierten Objekte in einer Datenbank auf. Dies kann verwendet werden, um die Abhängigkeiten für eine Partitionsfunktion zu überprüfen, bevor sie geändert wird.

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;

Teilen einer Partition mit Transact-SQL

  1. Stellen Sie im Objekt-Explorer eine Verbindung mit Ihrer Zieldatenbank her.

  2. Klicken Sie in der Standardleiste auf Neue Abfrage.

  3. Kopieren Sie das folgende Beispiel in das Abfragefenster, und klicken Sie dann auf Ausführen.

    Dieses Beispiel:

    • Sucht nach einer früheren Version der Partitionsfunktion myRangePF1 und löscht sie, wenn sie gefunden wird.
    • Erstellt eine Partitionsfunktion, die aufgerufen wird myRangePF1 , die eine Tabelle in vier Partitionen partitioniert.
    • Teilt die Partition zwischen boundary_values 100 und 1000 auf, um eine Partition zwischen boundary_values 100 und 500 und einer Partition zwischen boundary_values 500 und 1000 zu erstellen.
    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);  
    

Zusammenführen von zwei Partitionen mit Transact-SQL

  1. Stellen Sie im Objekt-Explorer eine Verbindung mit Ihrer Zieldatenbank her.

  2. Klicken Sie in der Standardleiste auf Neue Abfrage.

  3. Kopieren Sie das folgende Beispiel in das Abfragefenster, und klicken Sie dann auf Ausführen.

    Dieses Beispiel:

    • Überprüft, ob eine frühere Version der Partitionsfunktion myRangePF1 vorhanden ist, und löscht sie, wenn sie gefunden wird.
    • Erstellt eine Partitionsfunktion, die mit drei Grenzwerten aufgerufen myRangePF1 wird, was zu vier Partitionen führt.
    • Führt die Partition zwischen boundary_values 1 und 100 mit der Partition zwischen boundary_values 100 und 1.000 zusammen.
    • Dies führt dazu, dass die Partitionsfunktion myRangePF1 zwei Grenzpunkte, 1 und 1.000, hat.
    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);  
    

Löschen einer Partitionsfunktion mit SSMS

  1. Stellen Sie im Objekt-Explorer eine Verbindung mit Ihrer Zieldatenbank her.

  2. Erweitern Sie die Datenbank mit der zu löschenden Partitionsfunktion und dann den Ordner Speicher .

  3. Erweitern Sie den Ordner Partitionsfunktionen .

  4. Klicken Sie mit der rechten Maustaste auf die Partitionsfunktion, die Sie löschen möchten, und klicken Sie dann auf Löschen.

  5. Stellen Sie im Dialogfeld "Objekt löschen" sicher, dass die richtige Partitionsfunktion ausgewählt ist, und wählen Sie dann "OK" aus.

Nächste Schritte

Weitere Informationen zu verwandten Konzepten finden Sie in den folgenden Artikeln: