Script für SQL Datenbank zur Löschung alten Daten

logist

New Member
Hallo Freunde,

brauche Hilfe von SQL Experten. Ich habe auf meinem Server SQL Server 2008 laufen. Durch eine Hardware werden die Daten auf dem Server übertragen und gespeichert. Jetzt wollte ich ein Script oder eine Task haben, die mit alle alte Daten automatisch, z.B. alle die älter sind als 1 Monat, automatisch löscht. Ist das möglich? Kann mir jemand dabei behilflich sein?

So sieht die Struktur der Datenbank aus
SELECT TOP 1000 [id]
,[r_datetime]
,[ton1]
,[ton2]
,[speed]
,[pin1]
,[pin2]
,[pin3]
,[valid]
,[state]
,[voltage1]
,[voltage2]
,[alarm_id]
,[base_id]
,[sat_number]
,[signal]
,[run_time]
,[voltage3]
,[voltage4]
,[voltage5]
,[voltage6]
,[voltage7]
,[voltage8]
,[RFID]
FROM [LOGO].[dbo].[logo_info_history]

Dabei ist im Feld [r_datetime] das Datum wie folgt zu finden: 2012-01-18 10:38:23.000
Lässt sich damit was anfangen?

Liebe Grüße
 
Ich tippe mal auf: (ungetestet)
Code:
DELETE FROM [LOGO].[dbo].[logo_info_history] WHERE [r_datetime] < DATEADD (month, -1, CURRENT_TIMESTAMP ) ;
 
Besten Dank für den Beispiel. Ohne Gewähr ist leider schlecht. Wenn ich gleich aus meiner Unwissenheit alle Daten lösche, so verzeihe ich mir das nie ;)

Wie kann man in SQL z.B. eine Task erstellen, in der so ein Scrypt z.B. jeden Tag einmal ausgeführt wird?
 
Besten Dank für den Beispiel. Ohne Gewähr ist leider schlecht. Wenn ich gleich aus meiner Unwissenheit alle Daten lösche, so verzeihe ich mir das nie ;)
Dann probiere das an einer Testdatenbank aus. Oder warte, bis dir jemand bestätigt, dass ich falsch oder richtig liege. ;)

Bei der Taskerstellung muss dir jemand anders helfen.
 
Ich danke dir trotzdem. Ich habe soeben noch im Internet diese angegebene Funktion überprüft und es scheint wirklich, dass es so laufen muss.

Habe ich das richtig verstanden, dass wenn ich angenommen 3 Monate alte Daten löschen möchte, muss ich wie folgt vorgehen
Code:
DELETE FROM [LOGO].[dbo].[logo_info_history] WHERE [r_datetime] < DATEADD (month, -3, CURRENT_TIMESTAMP ) ;

Ja, das mit der Task wäre super, wenn mir jemand einen Tipp geben könnte.
 
-3 Monate ab heute ist dabei gemeint!

PS: Wenn dir deine Datenbank wichtig ist, kann ich nur hoffen, du machst regelmäßig Backups, wenn du dich noch nicht mit SQL auskennst.
 
...
PS: Wenn dir deine Datenbank wichtig ist, kann ich nur hoffen, du machst regelmäßig Backups, wenn du dich noch nicht mit SQL auskennst.

Ja, das wird jeden Tag gemacht :D Es ist halt so, dass jede 10 Sekunden auf den Server ein Datenpaket übertragen wird. Nach einigen Monaten wird der Speicher schon einmal voll, daher wollte ich diese Funktion mit in das System implementieren.
 
Ich muss sagen, dass der Code ohne Probleme funktioniert, danke an GwenDragon :D Das ist wirklich super. Das Einzige was ich jetzt noch super, ist die Implementierung dieser Funktion als ein Tast, der z.B. jeden Tag einmal automatisch ausgeführt wird. Oder ist es eventuell möglich diesen Code in eine externe Datei abzulegen, die anschließend über Windows Task einmal am Tag aufgerufen wird und die Funktion auf der SQL Ebene ausführt???
 
Erzeuge einen Windowstask der folgendes einmal am Tag ausführt:

SQLCMD.EXE -S SERVER\INSTANZ -d DATABASENAME -P PASSWORD -U USERID -q "DELETE FROM [LOGO].[dbo].[logo_info_history] WHERE [r_datetime] < DATEADD (month, -1, CURRENT_TIMESTAMP)"

Weiteres zu sqlcmd
http://msdn.microsoft.com/en-us/library/ms165702.aspx
http://msdn.microsoft.com/en-us/library/ms162773.aspx
http://msdn.microsoft.com/en-us/library/ms170207.aspx

Weiteres zum Taskplaner:
http://technet.microsoft.com/de-de/library/cc758861(v=ws.10).aspx
 
Last edited by a moderator:
Die Logdateien, für die diese Leute Zugriffsrechte im Dateisystem haben. Und die Systemmeldungen in der Ereignisanzeige, die für diese Leute lesbar sind.
Das musst du als Admin wissen und mit GPOs den Zugriff regeln.

Oder du lässt mit SQL Server Agent Jobs starten, wer da was darf. regeln bestimmte Einstellungen und Rollen (siehe http://msdn.microsoft.com/en-us/library/ms190926(v=sql.105).aspx).

Weiter kann ich auch nix sagen, da ich zu wenig Windows Server administriere.
 
Last edited by a moderator:
Back
Top