Sql server – jurnalul este plin din cauza ACTIVE_TRANSACTION [duplicat] (Programare, Sql, Server Sql, Sql Server 2012)

oabarca a intrebat.
a intrebat.

Am o bază de date foarte mare (50+ GB). Pentru a elibera spațiu pe hard disk, am încercat să șterg înregistrările vechi dintr-unul din tabele . Am rulat comanda :

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

Cu toate acestea, SQL Server 2012 a spus:

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

și nu a șters nimic. Ce înseamnă acest mesaj? Cum pot șterge înregistrările?

Comentarii

  • Mic 😉 Nu foarte mari. Categoric NU foarte mare, atâta timp cât încape în memoria unui server de gamă medie. –  > Por TomTom.
2 răspunsuri
oabarca

Iată ce am ajuns să fac pentru a rezolva eroarea.

În primul rând, am configurat modelul de recuperare a bazei de date ca SIMPLE. Mai multe informații aici.

Apoi, prin ștergerea unor fișiere vechi, am reușit să fac 5 GB de spațiu liber, ceea ce a oferit fișierului jurnal mai mult spațiu pentru a crește.

Am reluat instrucțiunea DELETE cu succes, fără niciun avertisment.

Am crezut că, prin rularea instrucțiunii DELETE, baza de date va deveni imediat mai mică, eliberând astfel spațiu pe hard disk. Dar nu a fost așa. Spațiul eliberat după o instrucțiune DELETE nu este returnat sistemului de operare în mod nemijlocit decât dacă executați următoarea comandă:

DBCC SHRINKDATABASE (MyDb, 0);
GO

Mai multe informații despre această comandă aici.

Ankit Bajpai

Repornirea serverului SQL Server va elibera spațiul de jurnal utilizat de baza de date. dacă totuși acest lucru nu este o opțiune, puteți încerca următoarele:

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

Sper că acest lucru vă va ajuta să găsiți soluția.

Comentarii

  • DBCC SQLPERF(‘logspace’) vă va arăta „Log Size (MB)” și „Log Space Used (%)”. Rețineți că dimensiunea jurnalului nu indică dimensiunea reală a jurnalelor scrise, ci dimensiunea fișierului de jurnal de pe disc. Așadar, pentru a obține dimensiunea reală a jurnalului în MB, înmulțițiți cele două coloane. De exemplu, dimensiunea jurnalului de 2,00 MB și 70% utilizat înseamnă că aveți 1,4 MB de date de jurnal. –  > Por brentlightsey.