SQL-Archivskript

8

Ich versuche Datensätze aus einer Tabelle in einer Datenbank zu einer identischen Tabelle in einer Archivdatenbank zu archivieren. Ich muss in der Lage sein, eine Einfügung für alle Datensätze mit einem Datum vor mehr als drei Jahren vorzunehmen, und dann diese Zeilen löschen. Allerdings hat diese Tabelle Millionen von Aufzeichnungen, die live sind, also möchte ich das in einer Schleife von ungefähr 100 bis 1000 Stücken gleichzeitig ausführen. Bisher führt meine gespeicherte Prozedur die gesamte insert-Anweisung und dann eine delete-Anweisung (in einer Transaktion) mit im Wesentlichen derselben WHERE-Klausel wie die insert-Anweisung aus. Meine WHILE-Schleife sucht nach dem ältesten Datum in der Tabelle, um festzustellen, wann die Schleife abgeschlossen ist. Einige davon scheinen ziemlich ineffizient zu sein. Gibt es eine Möglichkeit, ein Einfügen und Löschen auf dem Chunk von Datensätzen durchzuführen, ohne sie zweimal in der gleichen Schleifenausführung suchen zu müssen? Gibt es eine bessere Möglichkeit zu bestimmen, wann die WHILE-Anweisung abgeschlossen ist? Ausführen von MS SQL Server 2000.

Dies ist meine aktuelle Prozedur (ISAdminDB ist der Haupt-DB, ISArchive ist die Archiv-DB):

%Vor%     
Kevin 22.10.2009, 14:31
quelle

1 Antwort

6

Erstens löschen Sie Datensätze vor einem bestimmten Datum vor drei Jahren. Es ist dir egal, in welcher Reihenfolge sie gelöscht werden, du musst sie nur löschen, bis keine übrig sind. Sie können die Dinge auch beschleunigen, indem Sie eine temporäre Tabelle zum Speichern der IDs verwenden und indem Sie das Cut-Off-Datum in einer Variablen speichern und wiederholt darauf verweisen.

Jetzt haben wir also:

%Vor%     
MartW 22.10.2009, 16:09
quelle