Kako obrezati dnevnike transakcij v SQL Server 2012

Dnevniki transakcij v SQL Server 2012 s časom neizogibno rastejo in lahko v nekem trenutku zavzamejo ves razpoložljivi prostor na disku. Da bi se izognili tej situaciji, ima SQL Server orodja za razrezovanje dnevnikov transakcij, s katerimi sprosti prostor za ponovno uporabo. Dnevniki se samodejno obrežejo glede na uporabljeni model obnovitve:

  • Preprosto (preprost model) - dnevniki so okrnjeni, ko dosežejo mejnik
  • Polno (model popolne obnovitve) - po izvedbi varnostne kopije dnevnikov, če je bila po zadnji varnostni kopiji dosežena kontrolna točka

Vendar pa obstajajo situacije, ko samodejno obrezovanje dnevnikov ne deluje tako, kot bi moralo, datoteke dnevnika pa zavzamejo ves prostor na disku. To se praviloma zgodi nepričakovano, skrbnik pa mora nujno rešiti vprašanje sprostitve prostora na disku.

V tem primeru se pri povezovanju z bazo MS SQL pojavi naslednja napaka:

Ponudnik Microsoft OLE za SQL Server: Dnevnik transakcij za bazo podatkov „DBName“ je poln. Če želite izvedeti, zakaj prostora v dnevniku ni mogoče ponovno uporabiti, glejte stolpec log_reuse_wait_desc je sys.database
HRESULT = 80040E14, SQLSTATE = 4 2000, native = 9002

To pomeni, da so dnevniki transakcij zavzeli ves prosti prostor in SQL ne more več pisati dnevniških datotek. V tem primeru lahko dnevnike transakcij ročno obrežete.

Običajno se takšna situacija lahko pojavi pri uporabi modela popolne obnovitve (popolno). V tem modelu datoteke dnevnika niso okrnjene, dokler vsi dnevniki transakcij ne pridejo v varnostno kopijo. S tem si zagotovite neprekinjeno zaporedje zapisnih števil (LSN) v dnevniku. Če želite, da so dnevniki okrnjeni, morate izvesti popolno varnostno kopijo baze podatkov ali (hitreje) začasno spremeniti model obnovitve v Simple.

Za obrezovanje dnevnika transakcij zaženite konzolo SQL Server Management Studio (SSMS), izberite potrebno bazo podatkov in v kontekstnem meniju odprite njene lastnosti. Nato pojdite na zavihek Možnosti in spremenite model obnovitve baze podatkov (model obnovitve) v preprost.

Nato v kontekstnem meniju baze podatkov izberite Naloge -> Skrči -> Datotekas. Na polju Vrsta datoteke izberite Dnevnik in v polju Ime datoteke - ime datoteke dnevnika. Na polju Krčenje delovanja treba določiti Organizirajte strani, preden sprostite neuporabljen prostor, in določite velikost, da skrčite datoteko in kliknite V redu.

Po obrezovanju dnevnika znova preklopite na celoten model obnovitve baze podatkov.

Vse zgoraj opisane operacije je mogoče izvesti s preprostim skriptom iz Analizatorja poizvedb (skript se izvaja v SQL Serverju od leta 2008).
UPORABITE "DBName"
ALTER DATABASE "DBName" SET OBNOVA ENOSTAVNO
DBCC SHRINKFILE ("DBName", "Velikost za rezanje dnevnika");
ALTER DATABASE "DBName" nastavi OBNOVLJIVO POPOLNO

Namig. Po obrezovanju dnevnikov transakcij v SQL Serverju močno priporočamo, da ustvarite popolno varnostno kopijo baze podatkov, kot v primeru poškodbe datotek dnevnika ne boste mogli obnoviti baze podatkov s transakcijskimi datotekami.