Ändern einer Partitionsfunktion

Gilt für:SQL ServerAzure SQL-DatenbankVerwaltete Azure SQL-InstanzSQL-Datenbank in Microsoft Fabric

Sie können Tabellen- oder Indexpartitionen in SQL Server, Azure SQL-Datenbank und Azure SQL Managed Instance ändern, indem Sie mit Transact-SQL die angegebene Partitionsanzahl in Einerschritten in der Partitionsfunktion der partitionierten Tabelle bzw. des Indexes hinzufügen oder abziehen. 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 Dedicated SQL-Pools in Azure Synapse Analytics mit einigen Syntaxunterschieden verfügbar. Weitere Informationen finden Sie in Partitionierungstabellen im Dedicated SQL-Pool.

Begrenzungen

  • ALTER PARTITION FUNCTION kann nur zum Aufteilen einer Partition in zwei oder für das Zusammenführen von zwei Partitionen in eine verwendet werden. 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-AnweisungCREATE INDEX mit der DROP EXISTING = ON-Klausel neu.

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

  • Die Datenbank-Engine bietet keine Replikationsunterstützung für die Änderung 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 Dateigruppen, von ALTER PARTITION FUNCTION denen betroffen sind, müssen online sein.

Berechtigungen

Eine der folgenden Berechtigungen kann zum Ausführen ALTER PARTITION FUNCTIONverwendet 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.

  • CONTROL SERVER- oder ALTER ANY-Berechtigung 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. Sie kann verwendet werden, um die Abhängigkeiten für eine Partitionsfunktion vor ihrer Änderung zu überprüfen.

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.

    In diesem Beispiel werden folgende Schritte ausgeführt:

    • Sucht nach einer vorherigen Version der Partitionsfunktion myRangePF1 und löscht sie, wenn sie gefunden wird.
    • Erstellt eine Partitionsfunktion namens myRangePF1, die eine Tabelle in vier Partitionen partitioniert.
    • Teilt die Partition zwischen den boundary_values 100 und 1000 auf, um eine Partition zwischen den boundary_values 100 und 500 und eine Partition zwischen den 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 zweier 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.

    In diesem Beispiel werden folgende Schritte ausgeführt:

    • Sucht nach einer vorherigen Version der Partitionsfunktion myRangePF1 und löscht sie, wenn sie gefunden wird.
    • Erstellt eine Partitionsfunktion namens myRangePF1 mit drei Grenzwerten, was zu vier Partitionen führt.
    • Führt die Partition zwischen den boundary_values 1 und 100 mit der Partition zwischen den boundary_values 100 und 1.000 zusammen.
    • Dadurch hat die Partitionsfunktion myRangePF1 zwei Grenzpunkte, 1 und 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);  
    

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: