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