Effizientes Übertragen von Daten durch Partitionswechsel

Durch die Datenpartitionierung können Sie Teilmengen von Daten schnell und effizient verwalten und darauf zugreifen, während die Integrität der gesamten Datensammlung erhalten bleibt. Sie können die Transact-SQL-Anweisung ALTER TABLE...SWITCH zum schnellen und effizienten Übertragen von Teilmengen der Daten folgendermaßen verwenden:

  • Zuweisen einer Tabelle als Partition zu einer bereits vorhandenen partitionierten Tabelle.

  • Verschieben einer Partition aus einer partitionierten Tabelle in eine andere.

  • Neuzuweisen einer Partition, um eine einzelne Tabelle zu erstellen.

Informationen zu Konzepten des Partitionswechsels finden Sie im Beispiel ReadMe_SlidingWindow. Weitere Informationen zu Beispielen finden Sie unter Überlegungen zum Installieren der SQL Server-Beispiele und -Beispieldatenbanken.

Allgemeine Anforderungen für das Wechseln von Partitionen

Beim Übertragen einer Partition werden die Daten nicht physisch verschoben. Nur die Metadaten zum Speicherort der Daten werden geändert. Damit Sie Partitionen wechseln können, müssen mehrere allgemeine Anforderungen erfüllt werden:

  • Beide Tabellen müssen vor dem SWITCH-Vorgang vorhanden sein. Die Tabelle, aus der die Partition verschoben wird (die Quelltabelle), und die Tabelle, die die Partition erhält (die Zieltabelle), müssen in der Datenbank vorhanden sein, bevor Sie den Wechselvorgang ausführen.

  • Die empfangende Partition muss vorhanden und leer sein. Unabhängig davon, ob Sie eine Tabelle als Partition einer bereits vorhandenen partitionierten Tabelle hinzufügen oder eine Partition aus einer partitionierten Tabelle in eine andere verschieben, muss die Partition, die die Partition empfängt, vorhanden und leer sein.

  • Die empfangende nicht partitionierte Tabelle muss vorhanden und leer sein. Wenn Sie eine Partition neu zuweisen, um eine nicht partitionierte Tabelle zu erstellen, muss die Tabelle, die die neue Partition empfängt, vorhanden sein, und es muss sich um eine leere, nicht partitionierte Tabelle handeln.

  • Partitionen müssen für die gleiche Spalte durchgeführt werden. Wenn Sie eine Partition aus einer partitionierten Tabelle in eine andere verschieben, müssen beide Tabellen für die gleiche Spalte partitioniert sein.

  • Die Quell- und die Zieltabelle müssen die gleiche Dateigruppe verwenden. Die Quell- und die Zieltabelle der ALTER TABLE...SWITCH-Anweisung müssen sich in der gleichen Dateigruppe befinden, und ihre Spalten mit umfangreichen Werten müssen in der gleichen Dateigruppe gespeichert sein. Alle zugehörigen Indizes, Indexpartitionen oder indizierten Sichtpartitionen müssen ebenfalls in der gleichen Dateigruppe gespeichert sein. Die Dateigruppe darf sich jedoch von der Dateigruppe der zugehörigen Tabellen oder zugehörigen Indizes unterscheiden.

Informationen zu Partitionswechseln, wenn indizierte Sichten definiert wurden, finden Sie unter Partitionswechsel bei definierten indizierten Sichten.

Anforderungen an die Tabellen- und Indexstruktur

Neben den oben genannten allgemeinen Anforderungen müssen die Quell- und die Zieltabelle die gleiche Struktur aufweisen. Die Strukturanforderungen lauten wie folgt:

  • Die Quell- und die Zieltabelle müssen die gleiche Spaltenstruktur und -reihenfolge aufweisen. Sie müssen die gleichen Spalten mit den gleichen Namen und den folgenden gleichen Elementen aufweisen: Datentyp, Länge, Sortierung, Genauigkeit, Dezimalstellen, NULL-Zulässigkeit und Primärschlüsseleinschränkungen (falls vorhanden). Außerdem müssen sie die gleichen Einstellungen für ANSI_NULLS und QUOTED IDENTIFIER aufweisen. Zudem müssen die Spalten in derselben Reihenfolge definiert sein. Die IDENTITY-Eigenschaft wird nicht berücksichtigt.

    VorsichtshinweisVorsicht

    Partitionswechsel können dazu führen, dass in IDENTITY-Spalten der Zieltabelle Werte doppelt auftreten und Lücken in den Werten von IDENTITY-Spalten in der Quelltabelle entstehen. Verwenden Sie DBCC CHECKIDENT, um die Identitätswerte der Tabellen zu überprüfen, und korrigieren Sie die Werte bei Bedarf.

  • Die NULL-Zulässigkeit der Partitionierungsspalten muss übereinstimmen. Die Quell- und Zieltabelle muss NULL oder NOT NULL sein. Wenn eine der Tabellen nicht partitioniert ist, muss die NULL-Zulässigkeit der Spalte, die der Partitionierungsspalte der anderen Tabelle entspricht, mit der Spalte der partitionierten Tabelle übereinstimmen.

    Wichtiger HinweisWichtig

    Sie sollten NOT NULL in der Partitionierungsspalte in partitionierten Tabellen angeben. Es wird außerdem empfohlen, NOT NULL für nicht partitionierte Tabellen anzugeben, die als Quelle oder Ziel für ALTER TABLE...SWITCH-Vorgänge fungieren. Wenn partinionierte Spalten NOT NULL sind, wird für CHECK-Einschränkungen für Partitionierungsspalten das Überprüfen auf NULL-Werte nicht erzwungen. NULL-Werte werden gewöhnlich in der äußersten linken Partition einer partitionierten Tabelle platziert. Durch das Fehlen einer NOT NULL-Einschränkung in der Quell- und Zieltabelle werden möglicherweise CHECK-Einschränkungen beeinflusst, die auch für die Partitionierungsspalte definiert sind, wenn Sie eine andere Partition als die äußerste linke Partition wechseln und wenn die ANSI_NULLS-Datenbankoption auf ON festgelegt ist.

  • Berechnete Spalten müssen die gleiche Syntax aufweisen. Wenn es sich bei den entsprechenden Partitionsschlüsseln um berechnete Spalten handelt, ist die Syntax von Ausdrücken gleich, die die berechneten Spalten definieren, und beide berechneten Spalten sind permanent.

  • ROWGUID-Eigenschaften müssen gleich sein. Alle Spalten, die mit der ROWGUID-Eigenschaft definiert wurden, müssen einer Spalte in der anderen Tabelle entsprechen, die ebenfalls mit der ROWGUID-Eigenschaft definiert wurde.

  • XML-Spalten müssen das gleiche Schema aufweisen. Alle xml-Spalten müssen für die gleiche XML-Schemaauflistung typisiert sein.

  • Die Einstellungen für Daten in Zeilen aller text-, ntext - oder image-Spalten müssen gleich sein. Weitere Informationen zu dieser Einstellung finden Sie unter Daten in Zeilen.

  • Tabellen müssen die gleichen gruppierten Indizes aufweisen. Die Quell- und die Zieltabelle müssen den gleichen gruppierten Index aufweisen, und die Indizes dürfen vor dem Wechseln der Partitionen nicht deaktiviert werden.

  • Nicht gruppierte Indizes müssen definiert werden und identisch sein. Alle nicht gruppierten Indizes, die für die Zieltabelle definiert werden, sind auch für die Quelltabelle definiert und weisen eine identische Struktur hinsichtlich der Eindeutigkeit, den Unterschlüsseln und der Sortierrichtung (ASC oder DESC) für jede Indexschlüsselspalte auf. Nicht gruppierte Indizes, die deaktiviert sind, unterliegen dieser Anforderung nicht.

Einschränkungsanforderungen

Die folgenden zusätzlichen Anforderungen für Einschränkungen müssen beim Verschieben von Partitionen ebenfalls berücksichtigt werden:

  • CHECK-Einschränkungen müssen genau übereinstimmen oder auf Quelle und Ziel angewendet werden können. Alle CHECK-Einschränkungen, die für die Zieltabelle definiert werden, müssen auch für die Quelltabelle als genaue Übereinstimmung definiert werden oder so, dass sie auf die CHECK-Einschränkungen der Zieltabelle angewendet werden können (z. B. als Teilmenge).

  • Einschränkungen für int-Spalten müssen gleich oder eine Teilmenge sein. Alle CHECK-Einschränkungen für int-Spalten in der Quelltabelle müssen übereinstimmen oder als Teilmenge von Einschränkungen für die int-Spalte der Zieltabelle vorhanden sein. Wenn die Zieltabelle z. B. eine Einschränkung für eine int-Spalte Column1 aufweist, die Column1 < 100 angibt, muss die entsprechende Spalte Column1 der Quelltabelle entweder die gleiche Einschränkung oder eine Teilmenge der Einschränkung aufweisen, die auf Werte in der Zieltabelle angewendet wurden, z. B. Column1 < 90 in der Quelltabelle. CHECK-Einschränkungen, die mehrere Spalten angeben, müssen mithilfe der gleichen Syntax definiert werden.

  • Nicht partitionierte Tabellen müssen die gleichen Einschränkungen wie die Zielpartition aufweisen. Wenn Sie einer bereits vorhandenen partitionierten Tabelle eine nicht partitionierte Tabelle als Partition hinzufügen, muss eine Einschränkung für die Spalte der Quelltabelle definiert werden, die dem Partitionsschlüssel der Zieltabelle entspricht. Auf diese Weise wird sichergestellt, dass der Bereich der Werte in die Begrenzungswerte der Zielpartition passt.

  • Begrenzungswerte der Quellpartition müssen innerhalb der Begrenzung der Zielpartition liegen. Wenn Sie eine Partition einer partitionierten Tabelle in eine andere partitionierte Tabelle verschieben, müssen die Begrenzungswerte der Quellpartition in die Begrenzungswerte der Zielpartition passen. Wenn die Begrenzungswerte nicht passen, muss eine Einschränkung für den Partitionsschlüssel der Quelltabelle definiert werden, damit gewährleistet ist, dass sämtliche Daten in der Tabelle in die Begrenzungswerte der Zielpartition passen.

    VorsichtshinweisVorsicht

    Vermeiden Sie Datentypkonvertierung in Einschränkungsdefinitionen. Einschränkungen mit impliziten oder expliziten Datentypkonvertierung, die für Tabellen definiert werden, die Quellen für Partitionswechsel sind, können zu einem Fehler bei ALTER TABLE...SWITCH führen.

  • Die Quell- und die Zieltabelle müssen die gleichen FOREIGN KEY-Einschränkungen aufweisen. Wenn die Zieltabelle FOREIGN KEY-Einschränkungen besitzt, müssen für die Quelltabelle die gleichen Fremdschlüssel für die entsprechenden Spalten definiert sein, und diese Fremdschlüssel müssen auf den gleichen Primärschlüssel wie die Fremdschlüssel der Zieltabelle verweisen. Die Fremdschlüssel der Quelltabelle können nur dann als is_not_trusted (diese Einstellung kann in der sys.foreign_keys-Katalogsicht angezeigt werden) markiert werden, wenn auch der entsprechende Fremdschlüssel der Zieltabelle als is_not_trusted markiert wird. Weitere Informationen zu dieser Einstellung finden Sie unter Richtlinien zum Deaktivieren von Indizes. Alle CASCADE-Regeln, die für die Fremdschlüssel der Zieltabelle definiert wurden, werden von SQL Server auf die neu verschobene Partition angewendet.

Weitere Anforderungen für das Verschieben von Partitionen

Die folgenden zusätzlichen Anforderungen müssen beim Verschieben von Partitionen ebenfalls berücksichtigt werden:

  • Indizes müssen an Tabellenpartitionen ausgerichtet werden. Alle Indizes in der Quelltabelle müssen an der Quelltabelle ausgerichtet werden. Alle Indizes in der Zieltabelle müssen an der Zieltabelle ausgerichtet werden. Die Quelltabelle und die Zieltabelle können beide partitioniert sein, beide können nicht partinioniert sein, oder nur eine der Tabellen ist partitioniert. Weitere Informationen zur Indexausrichtung finden Sie unter Spezielle Richtlinien für partitionierte Indizes.

  • Zusätzliche Einschränkungen und Anforderungen gelten für Quelltabellen mit indizierten Sichten. Wenn für die Zieltabelle in der ALTER TABLE … SWITCH-Anweisung eine indizierte Sicht definiert ist, finden Sie unter Partitionswechsel bei definierten indizierten SichtenEinschränkungen und Beispiele.

  • Es sind keine Volltextindizes zulässig. Es dürfen keine Volltextindizes für die Quell- oder die Zieltabelle vorhanden sein.

  • Es sind keine XML-Indizes für die Zieltabelle zulässig. Es dürfen keine XML-Indizes in der Zieltabelle vorhanden sein.

  • Kein Primärschlüssel/Fremdschlüssel definiert, wenn die Quelltabelle den Primärschlüssel aufweist. Es darf keine aktive Primärschlüssel-/Fremdschlüsselbeziehung zwischen der Quelltabelle und der Zieltabelle vorhanden sein, bei der die Quelltabelle den Primärschlüssel enthält.

  • Kein Primärschlüssel/Fremdschlüssel definiert, wenn die Zieltabelle den Fremdschlüssel aufweist. Es darf keine aktive Primärschlüssel-/Fremdschlüsselbeziehung zwischen der Quelltabelle und der Zieltabelle vorhanden sein, bei der die Zieltabelle den Fremdschlüssel enthält.

  • Auf die Quelltabelle darf nicht durch einen Fremdschlüssel in einer anderen Tabelle verwiesen werden. Auf die Quelltabelle darf nicht durch einen Fremdschlüssel in einer anderen Tabelle verwiesen werden.

  • Regeln für die Quell- oder Zieltabelle sind nicht zulässig. Es dürfen keine Regeln für die Quell- oder die Zieltabelle definiert sein. CHECK-Einschränkungen können für Quell- und Zieltabellen verwendet werden.

    HinweisHinweis

    Regeln sind eine Funktion, die aus Gründen der Abwärtskompatibilität bereitgestellt wird. Die bevorzugte Implementierung erfolgt mithilfe von CHECK-Einschränkungen. Weitere Informationen zu den Einschränkungen hinsichtlich CHECK-Einschränkungen finden Sie unter Einschränkungsanforderungen weiter oben in diesem Thema.

  • Quell- und Zieltabellen dürfen nicht repliziert werden. Weder die Quell- noch die Zieltabelle darf eine Quelle für die Replikation sein.

  • Vor dem Partitionswechsel müssen die erforderlichen Datenbankberechtigungen vorhanden sein. Da beim Partitionswechsel eine ALTER TABLE-Anweisung verwendet wird, müssen der ALTER TABLE-Anweisung die erforderlichen Datenbankberechtigungen zugeordnet sein. Der Berechtigungssatz muss für die Quell- und die Zieltabelle nicht übereinstimmen.

  • Beim Verschieben von Partitionen dürfen keine Trigger aktiviert werden. Durch das Verschieben von Tabellenpartitionen werden keine INSERT-, UPDATE- oder DELETE-Trigger sowie kaskadierenden Aktionen aktiviert, und es ist nicht erforderlich, dass für die Quell- und Zieltabellen ähnlich definierte Trigger vorhanden sind, damit Partitionen verschoben werden können.

    HinweisHinweis

    Bei einem ALTER TABLE…SWITCH-Vorgang wird eine Sperre des Typs Sch-M (Schemaänderung) für die Quell- und die Zieltabellen abgerufen, um sicherzustellen, dass keine anderen Verbindungen während der Änderung auf die Tabellen verweisen. Weitere Informationen zu Sperren finden Sie unter Sperrmodi.

So verschieben Sie Tabellenpartitionen