2009-07-02 3 views
0

Wir haben eine partitionierte Ansicht mit 12 Mitgliedstabellen. Die Partitionierungsspalte ist ein Datum, wir haben eine Tabelle für jeden Monat. Daten werden kontinuierlich in die Tabelle des aktuellen Monats eingefügt. Ältere Tabellen sind konstant.Wie bewahren Sie alte Daten auf, die möglicherweise erneut in die Datenbank eingefügt werden müssen?

Zu Beginn jedes nächsten Monats wird eine neue Tabelle erstellt und zur Ansicht hinzugefügt. Zur gleichen Zeit werden wir die älteste Tabelle aus der Datenbank entfernen, aber wir müssen die Daten irgendwie bewahren, weil wir diese Daten in Zukunft möglicherweise zur Analyse und zum Vergleich vorübergehend in die Datenbank einfügen müssen. Zum Beispiel im Juni 2011, wenn die partitionierte Ansicht von Juli 2010 bis Juni 2011 Member-Tabellen haben wird, müssen wir möglicherweise die Daten von Juni 2009 und Juni 2010 vorübergehend wieder einfügen.

Meine Frage ist: Wie würdest du das 'bewahren' und dann die 'reinsert' Operation machen? Gibt es dafür einen empfohlenen Weg oder ein bekanntes Muster?

Wir verwenden SQL Server 2005 Standard Edition. Ich bin ein Neuling in der Datenbankverwaltung.

(EDIT: Warum jemand Partitionierung und eine neue Tabelle für jeden Monat verwenden könnte Siehe SQL Server 2000 Partitioned Views und SQL Server 2005 Partitioned Tables and Indexes?)

+0

Ihr Prozess, wie Sie es beschrieben haben, behält die Daten, Sie sehen es nur nicht in der partitionierten Ansicht. Lass die alte Tabelle einfach nicht fallen. Sie müssen möglicherweise ein Beispiel für das geben, was Sie tun. Verwenden Sie partitionierte Ansichten, um die Leistung zu verbessern oder das Laden von Daten zu vereinfachen? –

Antwort

1

Warum das Massenkopierwerkzeug nicht (BCP), den Inhalt der Tabelle in eine Datei zu exportieren.

Sie können es dann zippen und es an einem sicheren Ort aufbewahren, bis Sie das bcp-Tool erneut verwenden müssen, um die Tabelle neu zu erstellen. Um

zu exportieren

bcp yourdb..Stuff200901 OUT Stuff200901.bcp -T -S yourdbsvr -r "\n" -t "|" -c 

zu importieren (beachten Sie benötigen, um die Tabelle zu erstellen)

bcp yourdb..Stuff200901 in Stuff200901.bcp -c -S yourdbsvr -T -t "|" -k -e err.txt 

Typ bcp, um eine vollständige Liste der Optionen an der Eingabeaufforderung zu erhalten.

2

Wahrscheinlich nicht die Antwort, die Sie wollen, aber ich sage es sowieso - das ist in der Regel, wofür Sie ein Data Warehouse verwenden würden. Mischen Sie diese alten Monate in das Data Warehouse und führen Sie dort Ihre Analyse & Analyse durch.

2

mit Datenspeicherung ist so billig in diesen Tagen, warum nicht alle Daten in einer Tabelle nach Datum filtern. Fügen Sie einen Index für dieses Datum hinzu, um die Leistung zu verbessern, wenn die Tabellengröße zunimmt.

Wenn das keine Option ist, würde ich einfach eine Sicherung der Tabelle erstellen, die Sie später wiederherstellen können, oder Sie können Anweisungen aus den Daten erstellen, die Sie in einer SQL-Datei speichern und jederzeit ausführen können.

+1

+1 dafür. Das Erstellen einer neuen Tabelle für jeden Monat ist nicht die Art, wie Sie mit relationalen Datenbanken arbeiten sollten. –

+1

Klingt, als würde er nicht wirklich eine neue Tabelle per se erstellen, sondern Partitionierung: http://msdn.microsoft.com/en-us/library/ms345146(SQL.90).aspx –

2

Gut. Ich weiß nicht, ob ich 100% verstehe, was du meinst. Aber wie ich es verstehe, haben Sie eine Tabelle für jeden Monat der Daten, dann verwenden Sie eine Ansicht, um mehrere Tabellen zusammenzuführen (unter Verwendung von Vereinigungen, denke ich?). Wenn das der Fall ist, würde ich nichts tun, außer neue Tabellen für jeden Monat zu erstellen und die Ansicht zu ändern, um alte Tabellen zu entfernen, wie Sie sagten. Um dann alte Daten "reinsert" zu können, würde ich einfach eine neue Ansicht erstellen, die alle Tabellen enthält, oder den aktuellen ändern, wenn machbar. Es sollte keinen Grund geben, die alten Daten aus der Datenbank zu löschen.

+1

"No reason" ist irgendwie stark, aber zeigt schön auf die Antwort. Wenn zu viele Daten vorhanden sind, um die alten Monate auf dem Produktionsserver zu belassen, gibt es zu viel, um sie für die Berichterstellung "vorübergehend zurückzusetzen". Erstellen Sie ein Data Warehouse für die Berichterstellung. Wenn es nicht zu viele Daten gibt, dann sind sindre richtig. Lassen Sie es an Ort und Stelle und ändern Sie die Ansicht. – Bill

Verwandte Themen