Kako obrezati zapise transakcija u SQL Serveru 2012

Dnevnici transakcija u SQL Serveru 2012 neminovno rastu s vremenom i mogu zauzeti sav raspoloživi prostor na disku. Da bi izbjegao ovu situaciju, SQL Server ima alate za skraćivanje zapisnika transakcija kako bi oslobodio prostor za ponovnu upotrebu. Zapisnici se automatski obrezuju ovisno o upotrijebljenom modelu oporavka:

  • jednostavan (jednostavan model) - trupci se skraćuju nakon postizanja prekretnice
  • puni (potpuni model oporavka) - nakon izvođenja sigurnosne kopije zapisa, ako je kontrolna točka postignuta nakon posljednje sigurnosne kopije

No, postoje situacije kada automatsko obrezivanje zapisnika ne uspije kako treba, a datoteke dnevnika zauzimaju sav prostor na disku. U pravilu se to događa neočekivano, a administrator mora hitno riješiti pitanje oslobađanja prostora na disku.

U tom se slučaju prilikom povezivanja s MS SQL bazom podataka pojavljuje sljedeća pogreška:

Microsoft OLE usluga za SQL Server: Dnevnik transakcija za bazu podataka "DBName" je pun. Da biste saznali zašto se prostor u zapisniku ne može ponovo upotrijebiti, pogledajte stupac log_reuse_wait_desc je sys.database
HRESULT = 80040E14, SQLSTATE = 4 2000, izvorni = 9002

To znači da su zapisnici transakcija zauzeli sav slobodni prostor i SQL više ne može pisati datoteke dnevnika. U ovoj situaciji zapisnike transakcija možete ručno obrezati.

Ova se situacija obično može pojaviti kada se koristi model potpunog oporavka (Full). U ovom modelu datoteke dnevnika nisu skraćene dok svi zapisi transakcija ne uđu u sigurnosnu kopiju. Ovo će osigurati kontinuirani slijed brojeva zapisa (LSN-ova) u dnevniku. Stoga, da bi trupci bili skraćeni, trebate izvršiti potpuno sigurnosno kopiranje baze podataka ili (brže) privremeno promijeniti model oporavka u Jednostavno.

Dakle, da biste obrezali dnevnik transakcija, pokrenite konzolu SQL Server Management Studio (SSMS), odaberite bazu podataka koja vam je potrebna i otvorite njena svojstva u kontekstnom izborniku. Zatim idite na karticu Opcije i promijenite model oporavka baze podataka (model oporavka) u Jednostavan.

Zatim u kontekstnom izborniku baze podataka odaberite Zadaci -> Stisni -> Datotekaa. U polju Vrsta datoteke odaberite Dnevnik i u polju Naziv datoteke - naziv datoteke zapisa. U polju Smanjiti djelovanje treba navesti Organizirajte stranice prije oslobađanja neiskorištenog prostora, i odredite veličinu za smanjivanje datoteke i kliknite U redu.

Nakon obrezivanja zapisnika, prebacite se na potpuni (cjeloviti) model oporavka baze podataka.

Sve gore opisane operacije mogu se izvesti jednostavnom skriptu iz Analizatora upita (skripta se izvodi na SQL Serveru od verzije 2008).
KORISTITE "DBName"
ALTER DATABASE "DBName" POSTAVI OBNAVU Jednostavna
DBCC SHRINKFILE ("DBName", "Veličina kojoj treba rezati zapisnik");
ALTER DATABASE "DBName" POSTAVI OBNOVU PUNO

vijeće. Nakon obrezivanja zapisnika transakcija u SQL Serveru, toplo se preporučuje da stvorite potpunu sigurnosnu kopiju baze podataka kao u slučaju oštećenja datoteka dnevnika, nećete moći vratiti bazu podataka pomoću transakcijskih datoteka.