…i hvert fald ikke størrelsen af en C5 SQL-installations LOG-fil på SQL-serveren.
Lidt baggrund:
En SQL-server holder naturligvis godt styr på din data. Den gemmer dem i en eller flere databasefiler, hvor den hurtigt kan finde din data frem igen eller opdatere dem når C5 beder om det.
Men faktisk holder den også styr på alle ændringer af dine data. Det sker i en såkaldt log-fil hvor ALLE opdateringer af data registreres. I praksisk kan man derfor (hvis man ved hvad man gør) spole frem og tilbage i opdateringer – fx. ifm. at genskabe data efter et stort nedbrud. Eller man kan lave en komplet databasekopi hver nat – og så blot tage kopi af log’en flere gange i løbet af dagen.
Men en komplet kopi af databasen og kopi af en efterfølgende log-fil, kan man så at sige gendanne databasen som den så ud til et hvilket som helst tidspunkt mellem den komplette kopi og tidspunktet for logfilen ved at “spole” frem og tilbage i logfilen…
Nu er det faktisk de færreste C5 installationer der har brug for det her – en kopi af SQL-databasen uden log er som regel nok. Men bruger man ikke et backupsystem der kender til logfilen – eller ikke opsætter det til at tømme logfilen efter hver komplet backup af databasen, ja så vokser logfilen i en uendelighed – og bliver til sidst mange gange større end din C5 database. Og bruger man den ikke er det jo ren spild!
NB: Det er temmeligt komplekst at “spole” frem og tilbage i sådan en log-fil, så det vil ikke blive beskrevet nærmere i dette indlæg.
Hvordan slipper man så for den der log?
Det letteste er faktisk når man opretter databasen. Enhver SQL-database har en option der hedder “Recovery Model”. Sættes denne til “Simple”, ja så fortæller man SQL-serveren at man ikke har tænkt sig at bruge log-filen til noget. Og så bruger SQL-serveren den kun til at holde styr på transaktioner og holder den derfor selv så lille så mulig.
Optionen kan naturligvis også sættes EFTER databasen er sat i drift. Så virker det sådan fremadrettet, men der frigives ikke allerede allokeret log-plads.
Bemærk: Hvis du af en eller anden grund IKKE ønsker at skifte “Recovery Model” til “Simple”, men blot ønsker at få markeret log-pladsen som om der allerede er taget backup af den og den derfor er frigivet, så kan SQL-kommandoen “BACKUP LOG <databasenavn> TODISK=’NUL:’ ” gøre tricket.
Fint nok – jeg har skiftet en gammel database til “Simple”/kørt ovenstående BACKUP LOG-kommando og nu vil jeg så gerne have log-filen til faktisk også at blive mindre!
Jamen så kører du da bare en “DBCC SHRINKFILE(‘<logfilens navn>’,1)” på SQL-serveren. Logfilens navn vil typisk være <databasenavn>_log, men du kan checke det i egenskaber på databasen i SQL manageren. Og nu hvor du er inde i den så er der faktisk også et menupunkt der gør det samme når du højreklikker på databasen: Tasks / Shrink / Files…