2014-05-23 17 views
10

Ho un database molto grande (50+ GB). Per liberare spazio nel mio disco rigido, ho provato a cancellare vecchi record da uno dei tavoli. Ho eseguito il comando:Server Sql: il registro è pieno a causa di ACTIVE_TRANSACTION

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

Tuttavia, SQL Server 2012 ha detto:

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

e non ha eliminato una cosa. Cosa significa questo messaggio? Come posso cancellare i record?

+0

Piccolo;) Non molto grande. Sicuramente NON varia grande finché si adatta alla memoria di un server di fascia media. – TomTom

risposta

3

Il riavvio di SQL Server cancella lo spazio di registrazione utilizzato dal database. Se questo però non è un'opzione, è possibile provare il seguente:

* 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. 

Spero che questo vi aiuterà a trovare la soluzione.

+0

DBCC SQLPERF ('logspace') mostra "Dimensione registro (MB)" e "Spazio log utilizzato (%)". Tenere presente che le dimensioni del registro non indicano la dimensione effettiva dei registri scritti ma la dimensione del file di registro sul disco. Quindi, per ottenere la dimensione reale del log in MB, moltiplicare le due colonne. Ad esempio, le dimensioni del registro di 2,00 MB e il 70% utilizzato indicano che ci sono 1,4 MB di dati di registro. – brentlightsey

8

Ecco cosa ho fatto per aggirare l'errore.

Per prima cosa, ho impostato il modello di recupero del database come SEMPLICE. Maggiori informazioni here.

Quindi, eliminando alcuni vecchi file, sono riuscito a creare 5 GB di spazio libero che ha dato al file di registro più spazio per crescere.

Rieseguo correttamente l'istruzione DELETE senza alcun avviso.

Ho pensato che eseguendo l'istruzione DELETE il database sarebbe immediatamente diventato più piccolo, liberando così spazio nel mio disco rigido. Ma non era vero. Lo spazio liberato dopo un'istruzione DELETE non viene restituito al sistema operativo inmediatedly a meno che non si esegue il seguente comando:

DBCC SHRINKDATABASE (MyDb, 0); 
GO 

Maggiori informazioni su questo comando here.

Problemi correlati