2014-05-23 9 views
10

Ich habe eine sehr große Datenbank (50+ GB). Um Speicherplatz auf meiner Festplatte freizugeben, habe ich versucht, alte Datensätze aus einer der Tabellen zu löschen. Ich lief den Befehl:Sql Server - Log ist voll durch ACTIVE_TRANSACTION

delete from Table1 where TheDate<'2004-01-01'; 

jedoch SQL Server 2012 sagte:

Msg 9002, Level 17, State 4, Line 1 
The transaction log for database 'MyDb' is full due to 'ACTIVE_TRANSACTION'. 

und es hat nichts zu löschen. Was bedeutet diese Nachricht? Wie kann ich die Datensätze löschen?

+0

Klein;) Nicht sehr groß. Definitiv nicht groß, solange es in den Speicher eines Midrange-Servers passt. – TomTom

Antwort

3

Durch das Neustarten des SQL Servers wird der von Ihrer Datenbank verwendete Protokollspeicherplatz gelöscht. Ist dies jedoch nicht möglich ist, können Sie versuchen, die folgenden:

* Issue a CHECKPOINT command to free up log space in the log file. 

* Check the available log space with DBCC SQLPERF('logspace'). If only a small 
    percentage of your log file is actually been used, you can try a DBCC SHRINKFILE 
    command. This can however possibly introduce corruption in your database. 

* If you have another drive with space available you can try to add a file there in 
    order to get enough space to attempt to resolve the issue. 

Hoffnung das wird Ihnen helfen Ihre Lösung zu finden.

+0

DBCC SQLPERF ('logspace') zeigt Ihnen "Protokollgröße (MB)" und "Verwendeter Protokollbereich (%)". Beachten Sie, dass die Protokollgröße nicht die tatsächliche Größe der geschriebenen Protokolle angibt, sondern die Größe Ihrer Protokolldatei auf der Festplatte. Um also die wahre Größe des Logs in MB zu erhalten, multiplizieren Sie die beiden Spalten. ZB Log-Größe von 2,00 MB und 70% verwendet bedeutet, dass Sie 1,4 MB Log-Daten haben. – brentlightsey

8

Hier ist, was ich getan habe, um den Fehler zu umgehen.

Zuerst habe ich das Datenbankwiederherstellungsmodell als SIMPLE eingerichtet. Weitere Informationen here.

Dann löschte ich durch das Löschen einiger alter Dateien 5 GB freien Speicherplatz, was der Protokolldatei mehr Platz zum Wachsen gab.

Ich wiederholte die DELETE-Anweisung erfolgreich ohne Warnung.

Ich dachte, dass durch die Ausführung der DELETE-Anweisung die Datenbank sofort kleiner würde und Speicherplatz auf meiner Festplatte frei würde. Aber das war nicht wahr. Der Raum nach einer DELETE-Anweisung freigegeben wird nicht inmediatedly an das Betriebssystem zurückgegeben, wenn Sie den folgenden Befehl ausführen:

DBCC SHRINKDATABASE (MyDb, 0); 
GO 

Weitere Informationen zu diesem Befehl here.