Der beste Weg, um die Anzahl der Partitionen in der SQL Server-Tabelle zu erhöhen

8

Ich pflege eine Datenbank mit einer großen Tabelle, die für jeden Monat portioniert wird. Es gibt dort bereits Dutzende von Partitionen, aber es ist bis Januar 2013. Es ist also Zeit, neue Partitionen zu erstellen.

Kann jemand bitte raten, was der beste Weg ist, um eine neue Anzahl von Partitionen zu erstellen.

Ich mache den folgenden Schritt (noch nicht)

  1. Rufen Sie in SSMS die Eigenschaften der Datenbank ab und wechseln Sie zur Registerkarte Dateien.
  2. Klicken Sie unten rechts auf die Schaltfläche Hinzufügen, um eine neue Zeile hinzuzufügen.
  3. Geben Sie einen neuen Dateinamen ein (z. B. FN_DW_Archieve_2013_02).
  4. Geben Sie einen neuen logischen Namen ein (z. B. LN_DW_Archieve_2013_02).
  5. Erstellen Sie eine neue Dateigruppe, indem Sie in der Dropdown-Liste unter Dateigruppenzelle auswählen. (zB FG_DW_Archieve_2013_02)
  6. Klicken Sie auf OK

Dadurch wird eine neue Dateigruppe in meiner Datenbank erstellt.

Das größte Problem, das mich beunruhigt, besteht darin, die Partitionsfunktion und das Partitionsschema zu ändern. Welcher Expertenrat, kann ich sie löschen und neu erstellen, wirkt sich auf meine vorhandenen Daten aus? Oder kann ich sie mit der neuen Partition ändern.

Danke im Voraus.

Muhammad Sharjeel Ahsan
quelle

Antworten:

9

Es hört sich so an, als ob Sie eine neue Grenze für Ihre vorhandene Partitionierungsimplementierung erstellen möchten, und dies kann eine durch sein ALTER PARTITION FUNCTION ... SPLIT RANGE ....

Sie müssen auch vorher und ALTER PARTITION SCHEME ... NEXT USED ...ausführen, um die nächste Dateigruppe anzugeben, die die neue Partition enthält (dies hat einige Einschränkungen, wie unten angegeben). Hier ist ein Zitat von BOL zu dieser Operation:

Eine Dateigruppe muss online vorhanden sein und durch das Partitionsschema gekennzeichnet sein, das die Partitionsfunktion als NEXT USED verwendet, um die neue Partition zu speichern. Dateigruppen werden Partitionen in einer Anweisung CREATE PARTITION SCHEME zugewiesen. Wenn eine Anweisung CREATE PARTITION SCHEME mehr Dateigruppen als erforderlich zuweist (in der Anweisung CREATE PARTITION FUNCTION werden weniger Partitionen erstellt als Dateigruppen, um sie zu speichern), gibt es nicht zugewiesene Dateigruppen, und eine davon wird vom Partitionsschema als NEXT USED markiert. Diese Dateigruppe enthält die neue Partition. Wenn es keine Dateigruppen gibt, die vom Partitionsschema als NEXT USED markiert sind, müssen Sie ALTER PARTITION SCHEME verwenden, um entweder eine Dateigruppe hinzuzufügen oder eine vorhandene zu bestimmen, um die neue Partition zu speichern.

Thomas Stringer
quelle
Das sind also meine Partitionsfunktionen und das Partitionsschema. CREATE PARTITION FUNCTION [ArchivePartitionFunction] (smalldatetime) ALS BEREICH FÜR WERTE (N'2012-12-30T23: 59: 00.000 ', N'2013-01-31T23: 59: 00.000') GO CREATE PARTITION SCHEME [ArchivePartitionScheme] ALS PARTITION [ArchivePartitionFunction] TO ([Archive_201212], [Archive_201301], [PRIMARY]) GO
Muhammad Sharjeel Ahsan
Wenn ich versuche, das Schema zu ändern, ist es in Ordnung. ALTER PARTITION SCHEME ArchivePartitionScheme NEXT USED Archive_201302 GO Die Änderung der Funktion führt jedoch zu einem Fehler. ALTER PARTITION FUNCTION [ArchivePartitionFunction] () MERGE RANGE ('2013-02-28T23: 59: 00.000') GO Der angegebene Partitionsbereich Wert konnte nicht gefunden werden.
Muhammad Sharjeel Ahsan
Zunächst einmal, warum machst du eine Fusion? Ich dachte, Sie wollten zusätzliche Partitionen. Außerdem muss die Grenze vorhanden sein, um eine MERGE durchzuführen.
Thomas Stringer
Danke, der folgende Code funktioniert großartig. ALTER PARTITION SCHEME ArchivePartitionScheme NÄCHSTE VERWENDET Archive_201302 GO ALTER PARTITION FUNCTION [ArchivePartitionFunction] () SPLIT RANGE ('2013-02-28T23: 59: 00.000') GO
Muhammad Sharjeel Ahsan