Накатывание нескольких резервных копий Transaction Log подряд

добавлено: 19 окт 13
понравилось:0
просмотров: 1161
комментов: 0

теги:

Автор: Andraptor

Недавно в MS SQL 2012 необходимо было восстановить базу на определенный момент времени. В базе настроен Log Shipping на очень удаленный сервер, поэтому файлов .trn после последнего дифференциального бэкапа оказалось дох..., вообщем много. В связи с этим написал небольшой скрипт, который сортирует .trn файлы по дате и накатывает их подряд, так же указывается каким файлом начинать восстановление, а каким заканчивать.


DECLARE @dir NVARCHAR(1000) = 'f:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\LogShipping\' --путь к резервным копиям лога транзакций
	,@DBName NVARCHAR(100) = 'DB1' --имя базы данных
	,@FirstFile NVARCHAR(200) = 'DB1_20131011110030.trn' --файл, с которого начинать восстановление
	,@LastFile NVARCHAR(200) = 'DB1_20131013030031.trn' --файл, которым заканчивать восстановление

SET NOCOUNT ON

IF object_id('tempdb..#dir') IS NOT NULL
	DROP TABLE #dir

CREATE TABLE #dir (fname NVARCHAR(200))

DECLARE @cmd NVARCHAR(2000) = 'dir /A:-D /B /O:D "' + @dir + '"'
	,@FileExtension NVARCHAR(10) = right(@FirstFile, 4)
	,@RestoreQuery NVARCHAR(max) = 'USE master
'

INSERT INTO #dir (fname)
EXEC xp_cmdshell @cmd

SELECT @RestoreQuery += 'RESTORE LOG [' + @DBName + '] FROM  DISK = N''' + @Dir + fname + ''' WITH  FILE = 1, NOUNLOAD, NORECOVERY
'
FROM #dir
WHERE fname IS NOT NULL
	AND fname LIKE '%' + @FileExtension
	AND fname BETWEEN @FirstFile
		AND @LastFile

SET @RestoreQuery += 'RESTORE DATABASE [' + @DBName + '] WITH RECOVERY
'

EXEC (@RestoreQuery)

Комментарии




Необходимо войти на сайт, чтобы оставлять комментарии