La meilleure façon d'effacer TOUS les fichiers ldf (fichiers journaux des transactions) dans toutes les bases de données de MS SQL Server, SI toutes les bases de données ont été sauvegardées auparavant bien sûr :
USE MASTER
print '*****************************************'
print '************ Czyścik LDF ****************'
print '*****************************************'
declare
@isql varchar(2000),
@dbname varchar(64),
@logfile varchar(128),
@recovery_model varchar(64)
declare c1 cursor for
SELECT d.name, mf.name as logfile, d.recovery_model_desc --, physical_name AS current_file_location, size
FROM sys.master_files mf
inner join sys.databases d
on mf.database_id = d.database_id
--where recovery_model_desc <> 'SIMPLE'
and d.name not in ('master','model','msdb','tempdb')
and mf.type_desc = 'LOG'
and d.state_desc = 'online'
open c1
fetch next from c1 into @dbname, @logfile, @recovery_model
While @@fetch_status <> -1
begin
print '----- OPERATIONS FOR: ' + @dbname + ' ------'
print 'CURRENT MODEL IS: ' + @recovery_model
select @isql = 'ALTER DATABASE ' + @dbname + ' SET RECOVERY SIMPLE'
print @isql
exec(@isql)
select @isql='USE ' + @dbname + ' checkpoint'
print @isql
exec(@isql)
select @isql='USE ' + @dbname + ' DBCC SHRINKFILE (' + @logfile + ', 1)'
print @isql
exec(@isql)
select @isql = 'ALTER DATABASE ' + @dbname + ' SET RECOVERY ' + @recovery_model
print @isql
exec(@isql)
fetch next from c1 into @dbname, @logfile, @recovery_model
end
close c1
deallocate c1
Il s'agit d'un code amélioré, basé sur : https://www.sqlservercentral.com/Forums/Topic1163961-357-1.aspx
Je vous recommande de lire cet article : https://docs.microsoft.com/en-us/sql/relational-databases/backup-restore/recovery-models-sql-server
Il est parfois utile d'activer de façon permanente RECOVERY MODEL = SIMPLE sur certaines bases de données et ainsi se débarrasser une fois pour toutes des problèmes de log. Surtout lorsque nous sauvegardons les données (ou le serveur) quotidiennement et que les changements quotidiens ne sont pas critiques du point de vue de la sécurité.