Dacă fișierul jurnal de tranzacții conține spațiu neutilizat, îl puteți elibera scăzând dimensiunea jurnalului. Acest proces se numește comprimarea fișierului jurnal.
Compresia poate fi efectuată numai dacă baza de date este online și în timp ce cel puțin un fișier jurnal virtual este disponibil. În unele cazuri, compresia nu este posibilă până la efectuarea următoarei operații de trunchiere.
De obicei, trunchierea are loc în mod automat în conformitate cu modelul de recuperare simplu, atunci când creați o copie de rezervă a bazei de date, precum și prin modelul de recuperare completă, atunci când backup jurnal de tranzacții. Cu toate acestea, trunchierea poate fi întârziată din mai multe motive. Pentru informații suplimentare, consultați Factorii care pot determina o întârziere a trunchierii jurnalului.
Comprimarea fișierului jurnal (fără a comprima fișierele bazei de date)
Monitorizarea evenimentelor de comprimare a fișierului jurnal
Pentru a monitoriza spațiul din jurnal
în care mărimea sa fizică este redusă prin eliminarea unuia sau mai multor fișiere de jurnal virtuale inactive. Unitatea de măsură atunci când scade dimensiunea este întotdeauna un fișier jurnal virtual. De exemplu, dacă aveți un fișier log de 600 megabyte (MB) împărțit în șase jurnale virtuale de 100 MB, dimensiunea fișierului jurnal poate fi redusă cu un multiplu de 100 MB. Dimensiunea fișierului poate fi redusă la 500 MB sau 400 MB, dar nu poate fi redusă la 433 MB sau 525 MB. Un fișier jurnal virtual care stochează toate intrările din jurnalul activ, adică Fișierul jurnal virtual activ face parte din jurnalul logic și nu poate fi șters. Pentru mai multe informații, consultați Arhitectura jurnalului tranzacțiilor fizice.
Motorul bazei de date selectează dinamic dimensiunea fișierului jurnal virtual atunci când acesta este creat sau extins. Pentru mai multe informații, consultați Arhitectura jurnalului tranzacțiilor fizice.
Dimensiunea curentă a fișierului jurnal este egală cu dimensiunea totală a paginilor utilizate de fișierele jurnal virtuale. Rețineți că aceste pagini nu sunt utilizate de fișierele jurnal. Fișierele jurnal virtuale care conțin o parte a jurnalului logic nu pot fi eliberate. Dacă toate fișierele virtuale din jurnal conțin părți dintr-un jurnal logic, comprimarea fișierelor nu este posibilă până când trunchierea jurnalului marchează unul sau mai multe fișiere jurnal virtuale ca inactive.
Operația de comprimare a fișierelor vă permite să ștergeți numai fișierele istorice virtuale inactive. Dacă nu este definită dimensiunea țintă, operația de comprimare a fișierelor șterge numai fișierele jurnal virtuale inactive care se află în spatele ultimului fișier jurnal virtual activ din fișier. Dacă este setată dimensiunea țintă, se va șterge numai numărul de fișiere virtuale care corespunde dimensiunii țintă (dar nu depășește). După comprimare, dimensiunea fișierului jurnal este, de obicei, puțin mai mare decât dimensiunea țintă, dar niciodată mai mică. Fișierele jurnal virtuale îngreunează prezicerea cât de mult puteți comprima.
Când comprimați orice fișier, spațiul este eliberat la sfârșitul fișierului. Când comprimați fișierul jurnal de tranzacții, un număr suficient de fișiere jurnal virtuale sunt eliberate la sfârșitul fișierului jurnal. Acest lucru se întâmplă astfel încât jurnalul să fie redus la dimensiunea specificată de utilizator. Argumentul target_size. Valoarea definită de utilizator este rotunjită la următoarea margine cea mai mare a fișierului virtual. De exemplu, dacă un utilizator cu un fișier de 600 MB care conține șase fișiere jurnal virtuale de dimensiune de 100 MB, utilizatorul specifică argumentul target_size. egală cu 325 MB, ultimele două fișiere log log sunt șterse, iar noua dimensiune a fișierului devine 400 MB.
Operația DBCC SHRINKDATABASE sau DBCC SHRINKFILE încearcă imediat să comprime fișierul jurnal fizic la dimensiunea necesară:
Dacă nici o parte a jurnalului logic al fișierelor jurnal virtuale nu extinde marcajul target_size. Fișierele jurnal virtuale care sunt după marcajul target_size. Instrucțiunea DBCC este executată cu succes fără mesaje.
Dacă o parte din jurnalul logic extinde marcajul target_size. SQL Server Database Engine maximizează spațiul și oferă un mesaj de informare. Mesajul vă spune ce acțiuni trebuie să efectuați pentru a elimina fișierul logic din jurnalele virtuale de la sfârșitul fișierului. După efectuarea acestor pași, puteți rula declarația DBCC din nou pentru a elibera spațiul rămas.
Să presupunem că există un fișier jurnal de 600 MB, care conține șase fișiere jurnal virtuale, revista are un început logic în revista virtuală 3 și se termină în revista virtuală 4. Urmați instrucțiunile DBCC SHRINKFILE argument target_size. egală cu 275 MB (adică trei sferturi din jurnalul virtual 3).
Jurnalele virtuale 5 și 6 sunt eliberate imediat, deoarece nu conțin o parte a jurnalului logic. Cu toate acestea, să fie eliberat pentru a atinge valorile specificate argument target_size fișier jurnal virtual de 4, de asemenea, dar acest lucru nu este posibil, deoarece conține sfârșitul jurnalului logic. După eliberarea fișierelor jurnal virtuale 5 și 6, motorul bazei de date umple restul fișierului jurnal virtual cu 4 intrări fictive. Acest lucru conduce la o schimbare de la sfârșitul fișierului jurnal la sfârșitul fișierului jurnal virtuale 1. În majoritatea sistemelor, toate operațiunile de pornire din fișierul jurnal virtual de 4 vor fi înregistrate timp de câteva secunde. Aceasta înseamnă că întreaga parte activă a jurnalului este mutată în fișierul jurnal virtual 1. Acum, fișierul jurnal arată astfel:
ghid DBCC SHRINKFILE oferă, de asemenea, un mesaj informativ care să ateste că nu se poate elibera toate cerințele de spațiu și Loguri BACKUP se poate face pentru a elibera spațiul rămas. După mutarea părții active a fișierului jurnal virtual 1, instrucțiunea BACKUP LOG va trunchia întregul jurnal logic în fișierul jurnal virtual 4:
Deoarece fișierul jurnal virtual 4 nu mai conține o parte a jurnalului logic, puteți executa aceeași instrucțiune DBCC SHRINKFILE cu argumentul target_size. egală cu 275 MB. Fișierul jurnal virtual 4 este apoi eliberat și mărimea fișierului jurnal fizic este redusă la dimensiunea necesară.
Anumiți factori, cum ar fi o tranzacție lungă, pot susține activitatea fișierelor jurnal virtuale pentru o perioadă lungă de timp. Acest lucru limitează capacitatea de a comprima jurnalul sau chiar nu permite acest lucru. Pentru informații suplimentare, consultați Factorii care pot determina o întârziere a trunchierii jurnalului.