Stor transaktionslog i SQL Server

Af og til kan man komme ud for, at transaktionsloggen på en SQL Server løber løbsk, og bliver alt for stor. Løsningen er som regel at lave en backup af transaktionsloggen, hvorved transaktionerne er gemt og loggen skrumper ind igen.

Problemerne kan dog hobe sig op, hvis man er kommet derud, hvor man ikke har plads til at gennemføre en backup! Her prøver jeg at samle nogle af mine erfaringer med at fejlsøge og løse dette problem. Min beskrivelse gælder for Microsoft SQL Server 2005 og 2008.

Først kan man prøve, om det bare er filen der skal skrumpes. Det kan gøres ved at lave en backup med TRUNCATE_ONLY:

BACKUP LOG databasenavn WITH TRUNCATE_ONLY

Filen skal dernæst krympes:

DBCC shrinkfile(‘navnpålogfil’, 1)

Hvis du samler ovenstående og kører shrinkfile før og efter kan du se forskellen.

DBCC shrinkfile(‘navnpålogfil’, 1)

BACKUP LOG databasenavn WITH TRUNCATE_ONLY

DBCC shrinkfile(‘navnpålogfil’, 1)

Du kan komme ud for at der ikke sker en bønne! Filen holder størrelsen. Du bliver da nødt til at finde ud af, hvad der holder på en transaktion.

  1. Se efter brugere, der har været længe aktive. Få stoppet dem.
  2. Bruger du replikering (transaktionel replikering)? Slet evt. publicering og abonnement. Hvis kommunikationen er stoppet, kan der hobe sig masser af transaktioner op.
  3. Laver du aldrig backup; måske fordi det er en database, der altid opbygges fra andre databaser? Så indstil “Recovery Model” til Simple.