45 votes

Comment supprimer le fichier .ldf de SQL Server 2008 ?

Merci d'avance

Si j'arrête SQL-server et que je supprime le fichier .LDF (fichier transactionlog) de la base de données, que se passera-t-il ? La base de données sera-t-elle considérée comme suspecte ou SQL-server en créera-t-il automatiquement une nouvelle ? SQL Server 2008 R2 Et la taille de mon fichier .LDF est trop importante, alors comment le gérer, si je peux le réduire ou le supprimer ? Suggérez-nous dans le formulaire de requête.

Merci

1voto

Maciej Niemir Points 514

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é.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X