Zone de chaos

Tronquer journal de log sur base en miroir


 

SQL Server rss

Pour tronquer le fichier de transaction d'un base de données en miroir, une sauvegarde de celui-ci sera lancée en boucle jusqu'à ce qu'il ne contienne plus de Virtual Log File actives. Un SHRINK sera réalisable en dernier lieu. Attention, cette solution est limitée à une base de données dont le nombre de transactions reste raisonnable.

 


DECLARE @TempVirtualLogFile AS TABLE ( FileId TINYINT, FileSize BIGINT, StartOffset BIGINT, FSeqNo INT, [Status] TINYINT, Parity TINYINT, CreateLSN VARCHAR(50))     
DECLARE @BackupPathName VARCHAR(1000)  
DECLARE @BackupTime VARCHAR(50)  
DECLARE @LogFileName VARCHAR(250)
	
INSERT @TempVirtualLogFile     
EXEC ('DBCC LOGINFO')   
	
SELECT  TOP 1 @LogFileName = [name] 
FROM    sys.database_files 
WHERE	type = 1 
	
WHILE (    
        SELECT  COUNT(*) AS Nb    
        FROM    @TempVirtualLogFile fu    
        INNER   JOIN sys.database_files fd ON fu.FileId = fd.[file_id]     
        AND     [Status] = 2  -- VLF actives
        GROUP BY fd.name    
       ) > 1    
BEGIN    
		
    SET @BackupTime = CONVERT(VARCHAR, GETDATE(), 112) + REPLACE(CONVERT(VARCHAR, GETDATE(), 114), ':', '')  
    SET @BackupPathName = 'I:\Backup\' + DB_NAME() + '_' + @BackupTime + '.TRN'

 -- !!! Remplacer le nom de la base de données en miroir
    BACKUP LOG [DBNAME] TO DISK = @BackupPathName  
    WAITFOR DELAY '00:00:01'
    
    DELETE FROM @TempVirtualLogFile  
     
    INSERT @TempVirtualLogFile     
    EXEC ('DBCC LOGINFO')    
	
END
	
DBCC SHRINKFILE(@LogFileName , 0) WITH NO_INFOMSGS  

 

 

Et enfin pour la petite histoire, voici un lien qui explique comment le fichier de transaction est géré :

http://technet.microsoft.com/fr-fr/library/ms179355.aspx

 
  • Auteur : juste
  • Créé le : 21/02/2011
  • Modifié le : 02/05/2011
  • Publié le : 14/03/2011
 

Ajouter un commentaire

Rechercher