Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
Azure SQL-Datenbank
Verwaltete Azure SQL-Instanz
SQL-Datenbank in Microsoft Fabric
Ändert eine Partitionsfunktion durch Teilen oder Zusammenführen der Begrenzungswerte. Das Ausführen einer ALTER PARTITION FUNCTION Anweisung kann eine Tabelle oder eine Indexpartition, die die Partitionsfunktion verwendet, in zwei Partitionen aufteilen. Die Anweisung kann auch zwei Partitionen zu einer Partition zusammenführen.
Achtung
Mehrere Tabellen oder Indizes können dieselbe Partitionsfunktion verwenden. ALTER PARTITION FUNCTION betrifft alle in einer einzigen Transaktion.
Transact-SQL-Syntaxkonventionen
Syntax
ALTER PARTITION FUNCTION partition_function_name()
{
SPLIT RANGE ( boundary_value )
| MERGE RANGE ( boundary_value )
} [ ; ]
Argumente
partition_function_name
Der Name der Partitionsfunktion, die geändert werden soll.
SPLIT RANGE ( boundary_value )
Fügt der Partitionsfunktion eine Partition hinzu.
boundary_value bestimmt den Bereich der neuen Partition und muss von den vorhandenen Begrenzungsbereichen der Partitionsfunktion abweichen. Basierend auf boundary_value teilt die Datenbank-Engine einen der vorhandenen Bereiche in zwei Bereiche auf. Von diesen beiden Bereichen ist der mit dem neuen boundary_value-Wert die neue Partition.
Eine Dateigruppe muss online vorhanden sein. Außerdem muss das Partitionsschema, das die Partitionsfunktion verwendet, um die neue Partition aufzunehmen, die Dateigruppe als NEXT USED markieren. Eine CREATE PARTITION SCHEME Anweisung weist Dateigruppen Partitionen zu. Die Anweisung CREATE PARTITION FUNCTION erstellt weniger Partitionen als Dateigruppen, um sie zu halten. Eine Anweisung CREATE PARTITION SCHEME kann mehr Dateigruppen reservieren, als nötig ist. In diesem Fall bleiben dann nicht zugewiesene Dateigruppen übrig. Das Partitionsschema markiert außerdem eine der Dateigruppen als NEXT USED. Diese Dateigruppe nimmt die neue Partition auf. Wenn es keine Dateigruppen gibt, die das Partitionsschema als NEXT USED markiert, musst du eine Anweisung ALTER PARTITION SCHEME verwenden.
Die Anweisung ALTER PARTITION SCHEME kann entweder eine Dateigruppe hinzufügen oder eine bestehende auswählen, um die neue Partition zu speichern. Sie können eine Dateigruppe zuweisen, die bereits Partitionen enthält, um zusätzliche Partitionen aufzunehmen. Eine Partitionsfunktion kann bei mehreren Partitionsschemas verwendet werden. Aus diesem Grund müssen alle Partitionsschemas, die die Partitionsfunktion verwenden, der Sie Partitionen hinzufügen, eine NEXT USED-Dateigruppe aufweisen. Andernfalls versagt die ALTER PARTITION FUNCTION Anweisung mit einem Fehler, der das Partitionsschema oder Schemata ohne NEXT USED Dateigruppe anzeigt.
Wenn Sie alle Partitionen in derselben Dateigruppe erstellen, wird diese Dateigruppe anfänglich automatisch der NEXT USED-Dateigrupp zugewiesen. Nach der Ausführung eines Teilungsvorgangs gibt es jedoch keine ausgewählte NEXT USED-Dateigruppe mehr. Weise die Dateigruppe explizit als NEXT USED Dateigruppe zu, indem du using nutzt ALTER PARTITION SCHEME , sonst schlägt eine bevorstehende Split-Operation fehl.
Hinweis
Einschränkungen im Zusammenhang mit dem Columnstore-Index: Wenn ein Columnstore-Index für die Tabelle vorhanden ist, können nur leere Partitionen aufgeteilt werden. Vor dem Ausführen dieses Vorgangs müssen Sie den Columnstore-Index löschen oder deaktivieren.
MERGE [ ENTFERNUNG ( boundary_value) ]
Löscht eine Partition und führt alle in der Partition vorhandenen Werte in der verbleibenden Partition zusammen. RANGE (boundary_value) muss ein vorhandener Begrenzungswert der Partition sein, die gelöscht werden soll. Dieses Argument entfernt die Dateigruppe, in der boundary_value ursprünglich vorhanden war, aus dem Partitionsschema, wenn sie nicht von einer verbleibenden Partition verwendet wird, oder wird mit der NEXT USED-Eigenschaft markiert. Die zusammengeführte Partition ist in der Dateigruppe vorhanden, die anfänglich boundary_value nicht enthielt.
boundary_value ist ein konstanter Ausdruck, der auf Variablen (einschließlich Variablen eines benutzerdefinierten Typs) oder Funktionen (einschließlich benutzerdefinierter Funktionen) verweisen kann. Er kann nicht auf Transact-SQL-Ausdrücke verweisen.
boundary_value muss entweder mit dem Datentyp der zugehörigen Partitionierungsspalte übereinstimmen oder implizit in diesen konvertierbar sein. Sie können boundary_value auch während der impliziten Konvertierung nicht so abschneiden, dass dessen Größe und Dezimalstellen mit denen des entsprechenden input_parameter_type-Werts nicht übereinstimmen.
Hinweis
Einschränkungen für einen columnstore-Index: Zwei nicht leere Partitionen, die einen columnstore-Index enthalten, können nicht zusammengeführt werden. Vor dem Ausführen dieses Vorgangs müssen Sie den Columnstore-Index löschen oder deaktivieren.
Empfehlungen
Bewahren Sie immer leere Partitionen an beiden Enden des Partitionsbereichs auf. Erhalten Sie die Partitionen an beiden Enden, um sicherzustellen, dass die Partitionsteilung und die Partitionszusammenführung keine Datenverschiebungen verursachen. Die Partitionsteilung erfolgt am Anfang und die Partitionszusammenführung am Ende. Vermeiden Sie das Aufteilen oder Zusammenführen gefüllter Partitionen. Das Teilen oder Zusammenführen aufgefüllter Partitionen kann ineffizient sein. Diese Vorgänge können ineffizient sein, da durch das Teilen oder Zusammenführen möglicherweise ein viermal größeres Protokoll generiert wird und es zudem zu ernsthaften Sperren kommen kann.
Der wichtigste Grund dafür, dass Partitionen in separaten Dateigruppen platziert werden, besteht darin, sicherzustellen, dass Sie Sicherungs- und Wiederherstellungsvorgänge unabhängig für Partitionen ausführen können. Weitere Informationen zu Dateigruppen und Partitionierungsstrategien finden Sie unter Dateigruppen.
Einschränkungen
ALTER PARTITION FUNCTION Partitioniert alle Tabellen und Indizes, die die Funktion verwenden, in einer einzelnen atomaren Operation neu. Dieser Vorgang erfolgt jedoch offline, und in Abhängigkeit vom Umfang kann die Neupartitionierung ressourcenintensiv sein.
Nur zum ALTER PARTITION FUNCTION Aufteilen einer Partition in zwei oder zum Zusammenführen zweier Partitionen. Um die Partitionierung einer Tabelle anderweitig zu ändern (z. B. von 10 Partitionen in 5 Partitionen), führen Sie eine der folgenden Optionen aus. Der Ressourcenverbrauch dieser Optionen hängt von Ihrer Systemkonfiguration ab:
Erstellen Sie eine neue partitionierte Tabelle mit der erforderlichen Partitionsfunktion. Dann füge ich die Daten aus der alten Tabelle mit einem INSERT INTO in die neue Tabelle ein... SELECT FROM-Statement.
Erstellen Sie einen partitionierten gruppierten Index für einen Heap.
Hinweis
Das Löschen eines partitionierten gruppierten Index ergibt einen partitionierten Heap.
Droppe und baue einen bestehenden partitionierten Index neu auf, indem du die Transact-SQL-Anweisung CREATE INDEX mit der Klausel DROP EXIST = ON verwendest.
Führe eine Abfolge von ALTER PARTITION FUNCTION Anweisungen aus.
Alle Dateigruppen, die von ALTER PARTITION FUNCTION betroffen sind, müssen online sein.
ALTER PARTITION FUNCTION schlägt fehl, wenn ein deaktivierter Cluster-Index auf einer Tabelle existiert, die die Partitionsfunktion verwenden.
Die Datenbank-Engine bietet keine Replikationsunterstützung für die Änderung einer Partitionsfunktion. Äderungen an einer Partitionsfunktion in der Veröffentlichungsdatenbank müssen in der Abonnementdatenbank manuell angewendet werden.
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.
die CONTROL SERVER- oder ALTER ANY DATABASE-Berechtigung auf dem Server der Datenbank, in der die Partitionsfunktion erstellt wurde.
Beispiele
A. Teilen der Partition einer partitionierten Tabelle oder eines partitionierten Index in zwei Partitionen
Im folgenden Beispiel wird eine Partitionsfunktion zum Partitionieren einer Tabelle oder eines Indexes in vier Partitionen erstellt.
ALTER PARTITION FUNCTION teilt eine Partition in zwei, sodass insgesamt fünf Partitionen entstehen.
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. Zusammenführen von zwei Partitionen einer partitionierten Tabelle in einer Partition
Im folgenden Beispiel wird dieselbe Partitionsfunktion wie oben erstellt, und anschließend werden zwei Partitionen zu einer einzigen Partition zusammengeführt, sodass sich insgesamt drei Partitionen ergeben.
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);
Nächste Schritte
Weitere Informationen zur Tabellenpartitionierung und zu verwandten Konzepten finden Sie in den folgenden Artikeln: