Als een SQL database op recovery model : Full staat, wordt er door SQL Server een transactie logfile (<databasenaam>_log.ldf) bijgehouden.
Vroeg of laat krijg je te maken met de melding van SQL Server : ‘The Transaction log for database <databasename> is Full’.
Deze melding wil zeggen dat de Transactie logfile geen ruimte meer heeft om te groeien.
Mogelijke oorzaken van de melding ‘SQL Server Logfile vol’
- Schijfruimte op de partitie van de logfile is vol.
- Maximale grootte van de logfile is bereikt.
Oplossingen om de logfile weer ruimte te geven
Maak een backup
Voordat je ook maar iets gaat doen met een SQL Server (Productie) database, zorg er voor dat je een volledige backup maakt. In combinatie met Dynamics-AX, ook eerst alle gebruikers uit het systeem en de AOS’en uitschakelen.
Extra schijfruimte toekennen
Als de schijfruimte op de partitie van de database logfile vol is, dan kun je er natuurlijk voor kiezen om extra schijfruimte toe te kennen.
Vooral in virtuele omgevingen is dit meestal de meest eenvoudige oplossing.
Logfile comprimeren
Je kunt de file vanuit de SQL manager shrinken (verkleinen). Hierbij wordt ongebruikte ruimte in de logfile (.ldf file) weer vrijgegeven. Dit levert vaak maar een paar procent winst op.
Om de logfile echt te kunnen comprimeren moet deze, tijdelijk, losgekoppeld worden van de database.
Dit doe je door het recovery model van de database te wijzigen van full naar simple.
Daarna kan de logfile gecomprimeerd worden.
Script comprimeren logfile
Gebruik het onderstaande script om de logfile te comprimeren in 3 stappen:
- Wijzig eerst het recovery model van de database naar simpel
- Comprimeer de logfile naar 1 Mb.
- Wijzig het recovery model weer terug naar Full
Vervang hierbij de database naam, AX2012_TST, door de naam van de te comprimeren database.
Vervang de naam van de logfile door de fysieke naam van de logfile in de dataset van de database.
USE
AX2012_TST;
GO
— Truncate the log by changing the database recovery model to SIMPLE.
ALTER
DATABASE AX2012_TST
SET
RECOVERYSIMPLE;
GO
— Shrink the truncated log file to 1 MB.
DBCC
SHRINKFILE(AX2012_TST_Log, 1);
GO
— Reset the database recovery model.
ALTER
DATABASE AX2012_TST
SET
RECOVERYFULL;
GO