Метод переноса бэкапа базы

sv.alex
Дата: 27.01.2009 08:03:39
Доброго времени суток.
В свое время воозник вопрос с хранением быкапов базы (по умолчанию в MSSQL2000 нет возможности быкапить по сетевому адресу). Описываю один из методов как это обойти.
После того, как отработает бэкап базы, нжно запустить следующую процедуру:

declare @copy_comand as varchar(1000)
declare @archive_comand as varchar(1000)
--Задаем каманду на архивацию сегодняшнего бэкапа с сохранением на другом компьютере и с последующим удалением в текущем каталоге
select @archive_comand='exec master..xp_cmdshell '+'''"C:\Program Files\WinRAR\rar"  a -df  \\It7\share_fld\MSSQLBackUp\Lgota2007_db_'
+replace(convert(varchar(11),getdate(),102),'.','')+'0300'+' C:\Distrib\Lgota2007\Lgota2007_db_'+
+replace(convert(varchar(11),getdate(),102),'.','')+'0300'+'.bak'''
exec (@archive_comand)
-- формируем строку для копирования базы (не требуется, т.к. архив создается сразу по нужному пути)
/*select @copy_comand='xcopy C:\Distrib\Lgota2007\' +'Lgota2007_db_'+replace(convert(varchar(11),getdate(),102),'.','')+'0300'+
'.rar'+' \\It7\share_fld\MSSQLBackUp\  /s /e /y'
-- непосредственное копирование базы по указоному пути
exec master..xp_cmdshell @copy_comand*/
DECLARE @dir varchar(1000)
DECLARE @SQL varchar(1000)
declare @i int
select @i=4
while @i<15 begin
-- Формируем строку для пути из которого будет удаляться база старше 4 дней (проверка идет на 14-ти дневное устаревание)
select @dir='''\\It7\share_fld\MSSQLBackUp\'+'Lgota2007_db_'+replace(convert(varchar(11),dateadd(dd,-@i,getdate()),102),'.','')+'0300'+'.rar'''
-- скрепляем все в динамический запрос, который осуществляет проверку на существование указанного пути, если есть, то удаляем базу
select @SQL='DECLARE @file_exists int, @delete_command varchar(1000) EXECUTE MASTER..xp_fileexist ' +@dir+',' 
+ '@file_exists OUTPUT if @file_exists=1 begin'
+
' select @delete_command='+'''del \\It7\share_fld\MSSQLBackUp\Lgota2007_db_'+replace(convert(varchar(11),dateadd(dd,-@i,getdate()),102),'.','')
+'0300'+'.rar'''
+' exec master..xp_cmdshell @delete_command end'
exec(@SQL)
select @i=@i+1
end
я все навесли на DTS-ник.
Supra93
Дата: 27.01.2009 08:14:28
sv.alex
по умолчанию в MSSQL2000 нет возможности быкапить по сетевому адресу

Откуда такая информация?
sv.alex
Дата: 27.01.2009 08:25:10
Supra93
sv.alex
по умолчанию в MSSQL2000 нет возможности быкапить по сетевому адресу

Откуда такая информация?


Бэкап делаю через Database Maintenance Plans. На вкладке complete backup указывается путь сохранения. Кнопка "обзор" возвращает пути только с локального компьютера.
rata
Дата: 27.01.2009 08:29:19
sv.alex
На вкладке complete backup указывается путь сохранения. Кнопка "обзор" возвращает пути только с локального компьютера.

Тем не менее - если ввести UNC -путь руками (ну или скопипастить откуда ) - бакап будет совершенно нормально работать.
Разумеется, при условии правильно настроеных шар/прав :-)
sv.alex
Дата: 27.01.2009 08:45:37
rata
sv.alex
На вкладке complete backup указывается путь сохранения. Кнопка "обзор" возвращает пути только с локального компьютера.

Тем не менее - если ввести UNC -путь руками (ну или скопипастить откуда ) - бакап будет совершенно нормально работать.
Разумеется, при условии правильно настроеных шар/прав :-)


Ну вот( Каюсь, не знал. Главное что механизм архивации бэкапов чтоб работал и отслеживалось их время жизни, что как раз и реализовано в моей процедуре. Или я опять чего-то не знаю о возможностях сиквела?
Glory
Дата: 27.01.2009 10:20:00
Имхо,много лишних телодвижений. Например
replace(convert(varchar(11),getdate(),102),'.','') на самом деле есть convert(varchar(10),getdate(),112)
sv.alex
Дата: 27.01.2009 11:26:51
Glory
Имхо,много лишних телодвижений. Например
replace(convert(varchar(11),getdate(),102),'.','') на самом деле есть convert(varchar(10),getdate(),112)

Точно! Учту.