Frage

Ich habe einen Web-Server mit SQL 2008 ein simuliertes SQL 2005 db ausgeführt wird, und ich habe einen lokalen SQL 2005 db für Umwelt getestet werden.

Dies führt mich Skripte für die Datensicherung verwenden / Wiederherstellen von Daten für die Prüfung als 2008-Server-Backups wiederherstellen nicht zu einem 2005-Server.

Wenn ich ausführen, um diese SQL-Abfrage die Größe einer Tabelle auf meiner Produktion Web SQL Server (2008)

reduzieren
 DELETE FROM TickersDay
 WHERE (DATEDIFF(day, TickersDay.[date], GETDATE()) >= 8)
 GO

ich diese Meldung:

 Msg 9002, Level 17, State 4, Line 3
 The transaction log for database 'VTNET' is full. To find out why space in the log
 cannot be reused, see the log_reuse_wait_desc column in sys.databases

Es kommt auf, wenn ich Skripte auch manchmal veröffentlichen.

Wenn ich laufen diese SQL-Befehl ich folgendes Ergebnis:

 SELECT [name], recovery_model_desc, log_reuse_wait_desc
 FROM sys.databases

ERGEBNIS:

 [name]      recovery_model_desc       log_reuse_wait_desc

 VTNET  SIMPLE                     ACTIVE_TRANSACTION

Hier sind meine Fragen und Probleme:

  1. ich es .. Ich habe eine Transaktion Anweisung, die einen Rollback-Befehl
  2. braucht

0 Zurücksetzen> .. aber ich habe 100 gespeicherte Prozeduren so, bevor ich das tun ....

  1. IN DER ZWISCHENZEIT ... wie kann ich dieses Problem beseitigen ?? Ich habe versucht, Schrumpf- und ich habe versucht, die Db des Backup bis ...

  2. Wie Sie sehen können, ist es im Einfach-Modus ... Ich habe keine Ahnung, wie die Sicherung eine LOG ONLY-Datei ... (nicht gefunden haben, wie das zu tun) ...

War es hilfreich?

Lösung

Das könnte Sie der Lage sein, dieses Problem zu umgehen, indem einfach SQL bekommen nicht die gesamte Tabelle auf den Index durch die Verwendung zu verarbeiten nur die Daten gelöscht werden, erforderlich. Formulieren Sie es Index freundlich sein

DELETE FROM TickersDay
WHERE TickersDay.[date] <= DATEADD(day, -8, GETDATE())
GO

Wenn Sie dies häufig genug laufen (mindestens einmal täglich), dann nur, sie zu verarbeiten hat 1 / 9. oder weniger über einen Index auf TickersDay ([Datum]) statt durch die gesamte Tabelle gehen zu haben, wenn Sie DATEDIFF auf die Verwendung Feld.

Wenn das immer noch verursacht diese:

Das Transaktionsprotokoll für Datenbank 'VTnet' ist voll

Sie müssen wirklich die Log-Größe zu erhöhen, weil ich vermute, es ist nicht auf automatische Vergrößerung eingestellt und ist nicht groß genug für diesen Vorgang. Entweder das, oder auf der Suche beginnen, die Löschungen bei Dosieren (wieder vorausgesetzt, Sie einen Index für Datum haben, so dass diese effizient nur die 100 Zeilen Ziele), z.

DELETE TOP (100) FROM TickersDay
WHERE TickersDay.[date] <= DATEADD(day, -8, GETDATE())
GO

Sie können entweder Schleife es (während @@ rowcount> 0) oder es nur mehr planen häufig als ein Rieseln Hintergrund löschen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top