Entwerfen von Partitionen zum Verwalten von Datenteilmengen
Durch Partitionieren einer Tabelle oder eines Indexes können Sie Teilmengen der Daten schnell und effizient mithilfe der Transact-SQL ALTER TABLE...SWITCH-Anweisung auf folgende Weise verschieben:
Hinzufügen einer Tabelle als Partition zu einer bereits vorhandenen partitionierten Tabelle.
Verschieben einer Partition aus einer partitionierten Tabelle in eine andere.
Entfernen einer Partition aus einer einzelnen Tabelle.
Diese Szenarien können sinnvoll sein, wenn Sie einer partitionierten Tabelle neue Daten hinzufügen oder alte Daten aus der gleichen partitionierten Tabelle auf regelmäßiger Basis entfernen möchten. Dieser Vorgang kann große oder kleine Datenmengen in einer Vielzahl von Szenarien betreffen. Wenn die neuen Daten, die Sie hinzufügen, geladen, bereinigt oder transformiert werden müssen, können diese als separate Entität behandelt werden, bevor sie als Partition hinzugefügt werden. Alte Daten können archiviert oder in ein Data Warehouse verschoben werden. Unabhängig von der Größe der Datenauflistung ist die Übertragung schnell und effizient, da im Gegensatz zum Verwenden einer INSERT INTO SELECT FROM-Anweisung die Daten nicht physisch verschoben werden. Nur die Metadaten, die sich auf den Speicherort beziehen, werden aus einer Partition in eine andere verschoben.
Beispielszenario: AdventureWorks
Im Partitionierungsszenario der AdventureWorks-Beispieldatenbank archiviert Adventure Works Cycles alte Daten aus der TransactionHistory-Tabelle in einer TransactionHistoryArchive-Tabelle, indem Partitionen zwischen den beiden Tabellen verschoben werden. Dies geschieht, indem TransactionHistory für das TransactionDate-Feld partitioniert wird. Der Bereich der Werte für jede Partition umfasst einen Monat. Die TransactionHistory-Tabelle verwaltet die aktuellsten Transaktionen des Jahres, während TransactionHistoryArchive ältere Transaktionen verwaltet. Indem die Tabellen auf diese Weise partitioniert werden, kann die ein Jahr alte Datenmenge eines Monats auf monatlicher Basis aus TransactionHistory in TransactionHistoryArchive übertragen werden.
Zu Beginn jedes Monats wird der älteste Datenmonat, der sich zurzeit in der TransactionHistory-Tabelle befindet, in die TransactionHistoryArchive-Tabelle verschoben. Folgendes ist erforderlich, damit diese Aufgabe ausgeführt werden kann:
Die TransactionHistoryArchive-Tabelle muss das gleiche Entwurfsschema wie die TransactionHistory-Tabelle aufweisen. Es muss eine leere Partition vorhanden sein, die die neuen Daten empfängt. In diesem Fall ist TransactionHistoryArchive eine partitionierte Tabelle, die aus nur zwei Partitionen besteht. Eine Partition enthält alle Daten vor September 2003, und die andere Partition enthält alle Daten ab September 2003. Die letztgenannte Partition ist leer.
Die Partitionsfunktion der TransactionHistoryArchive-Tabelle wird so geändert, dass die leere Partition in zwei Partitionen unterteilt wird; dabei wird eine der Partitionen für den Empfang der neuen Partition mit den Daten aus September 2003 definiert.
Die erste Partition der TransactionHistory-Tabelle, die alle im September 2003 erstellten Daten enthält, wird in die zweite Partition der TransactionHistoryArchive-Tabelle verschoben. Beachten Sie, dass eine CHECK-Einschränkung für die TransactionHistory-Tabelle definiert werden muss, die angibt, dass ältere Daten vor dem 1. September ausgeschlossen werden (TransactionDate >= '9/01/2003'). Diese Einschränkung stellt sicher, dass Partition 1 ausschließlich Daten aus September 2003 enthält und für den Verschiebevorgang in die Partition bereit ist, die nur die Daten aus September 2003 der TransactionHistoryArchive-Tabelle enthält. Beachten Sie, dass alle Indizes, die nicht an ihren jeweiligen Tabellen ausgerichtet sind, gelöscht oder deaktiviert werden müssen, bevor der Verschiebevorgang erfolgt. Sie können nach dem Wechsel jedoch neu erstellt werden. Weitere Informationen zur Ausrichtung partitionierter Indizes finden Sie unter Spezielle Richtlinien für partitionierte Indizes.
Die Partitionsfunktion der TransactionHistory-Tabelle wird so geändert, dass ihre ersten beiden Partitionen in einer einzigen Partition zusammengeführt werden. Diese Partition, die nun zu Partition 1 geworden ist, enthält alle im Oktober 2003 erstellten Daten und ist für den Verschiebevorgang in TransactionHistoryArchive im nächsten Monat bereit, wenn die vorhandene CHECK-Einschränkung so geändert wird, dass keine Daten vor dem 1. Oktober angegeben werden (TransactionDate >= '10/01/2003').
Die Partitionsfunktion der TransactionHistoryArchive-Tabelle wird nochmals geändert, damit die zweite Partition, die die Daten aus September enthält, die soeben hinzugefügt wurden, mit der ersten Partition zusammengeführt wird. Durch diese Aktion wird die TransactionHistoryArchive-Tabelle erneut in ihren ursprünglichen Zustand versetzt, in dem die erste Partition alle Daten enthält und die zweite Partition leer ist.
Die Partitionsfunktion der TransactionHistory-Tabelle wird erneut geändert, um ihre letzte Partition in zwei Partitionen zu unterteilen, sodass der aktuellste Monat vom vorherigen Monat getrennt wird und die Partition für den Empfang der neuen Daten bereit ist.
Das vollständige Transact-SQL-Skript zum Implementieren dieses Szenarios finden Sie unter ReadMe_SlidingWindow.