SQL Log und ACTIVE GESCHÄFTE
-
10-10-2019 - |
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:
- ich es .. Ich habe eine Transaktion Anweisung, die einen Rollback-Befehl braucht
-
IN DER ZWISCHENZEIT ... wie kann ich dieses Problem beseitigen ?? Ich habe versucht, Schrumpf- und ich habe versucht, die Db des Backup bis ...
-
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) ...
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.