пятница, 10 февраля 2012 г.

Создание РК лога SQL с метками времени в имени файла

Нафига метки времени? Чтобы была естественная посуточная ротация.

Скрипт следующий:
declare @rktime varchar(5), @rkdate varchar(50), @filename varchar(100), @bckcomment varchar(100);
-- Получение времени запуска скрипта в формате мм-чч
SELECT @rktime = REPLACE(CONVERT(VARCHAR(5), GETDATE(), 108),':','-');
-- Получение полной даты/времени для комментария
select @rkdate = CONVERT(VARCHAR(11), GETDATE(), 106)
-- Формирование имени файла лога (с учетом времени создания) и комментария для архива
select @filename = 'D:\Backup\SQL_BASE\LOG\UT_log_' + @rktime + '.bak';
-- Формирование комментария к файлу (важна дата!)
select @bckcomment = 'UT2007 DB LOG backup. Created at ' + @rkdate + ' ('+ @rktime + ')';
BACKUP LOG [UT2007] TO DISK = @filename WITH NOFORMAT, INIT,  NAME = @bckcomment, SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO

Для целей "эмуляции" "Shipping Transaction Log" используем копирование на другой сервер:

declare @rktime varchar(5), @rkdate varchar(50), @filename varchar(100), @bckcomment varchar(100), @cmd varchar(100) ;
SELECT @rktime = REPLACE(CONVERT(VARCHAR(5), GETDATE(), 108),':','-');
select @rkdate = CONVERT(VARCHAR(11), GETDATE(), 106)
select @filename = 'D:\Backup\SQL_BASE\LOG\UT_log_' + @rktime + '.bak';
select @bckcomment = 'UT2007 DB LOG backup. Created at ' + @rkdate + ' ('+ @rktime + ')';
BACKUP LOG [UT2007] TO DISK = @filename WITH NOFORMAT, INIT,  NAME = @bckcomment, SKIP, NOREWIND, NOUNLOAD,  STATS = 10
select @cmd = 'xcopy  ' + @filename + '  \\sql01\backup$\SQL_BASE\LOG /Y /I';
EXEC xp_cmdshell @cmd

NB! xp_cmdshell, разумеется, должен быть разрешен (например, в surface area).


Комментариев нет:

Отправить комментарий