Selbst im SIMPLE-Wiederherstellungsmodell neigen die Dateien eines Transaction-Log dazu, gelegentlich groß zu werden und nehmen so nicht ganz unwesentlichen Server-Speicher in Anspruch. Klar, mag man da jetzt drüber argumentieren, dass es ja besser ist ein großes leeres Transaction-Log zu haben um im Falle nicht unnötige Zeit zu verschwenden.. Ich habe aber gern einen Überblick über wirklich in Verwendung stehenden Speicherplatz und lass die Files daher regelmäßig verkleinern.
Folgendes Skript hilft mir hierbei und verrichtet seit einigen Monaten einen guten Job. Woche für Woche. Die Verwendung natürlich ohne Gewähr, aber als Orientierungshilfe vielleicht nicht schlecht. Habe das Script über den SQL Serve Agent eingebunden, dass der Job jede Woche läuft. Kommen jede Woche ein paar GB zusammen, die so wieder freigegeben werden. Dazu muss man sagen, dass auf dem Server ca. 500 Datenbanken sind, die gern mal sporadisch verwendet werden.
Declare @DbName varchar(50) = '' Declare @FileId int = 0 declare @statement nvarchar(300); declare databasecursor cursor for select name from sys.databases where database_id > 5 open databasecursor fetch next from databasecursor into @DbName while @@fetch_status = 0 begin print @DbName + ' shrinking...' set @statement = N'USE ' + '[' + @DbName + ']' + CHAR(13) + N'Declare @FileId int = (select top 1 file_id from sys.database_files where type = 1);' + N'print @FileId;' + N'dbcc shrinkfile (@FileId);'; exec sp_executesql @Statement; print @DbName + 'shrinking completed.' fetch next from databasecursor into @DbName end close databasecursor deallocate databasecursor