Freigeben über


Ändern einer Partitionsfunktion

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance

Sie können Tabellen- oder Indexpartitionen in SQL Server, Azure SQL Database 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 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 den Assistenten zum Verwalten von Partitionen in SQL Server Management Studio (SSMS) verwenden.

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

      Hinweis

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

    • Verwenden Sie die Transact-SQL-Anweisung CREATE INDEX mit der Klausel DROP EXISTING = ON, um einen vorhandenen partitionierten Index zu löschen und neu zu erstellen.

    • 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 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. 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.

    Dieses Beispiel:

    • 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.

    Dieses Beispiel:

    • 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: