PDA

Показать полную графическую версию : SQL Backup-создание ежедневно нового архива


Anatoliy2004
22-09-2011, 12:00
Всем привет!
Как сделать так что бы каждый день делался бекап..Но не перезатирал его а создавался новый например с последовательным числом!
Например:
неделя-arhive1,
понедельник-arhivе2
вторник-arhive3

и тд...
я понимаю что можна сделать для каждого новый task?но нет ли какого нибудь ключика чтоб добавляло к архиву номер дня недели, как например в архиваторе rar

сейчас бекап у меня делается такой командой

BACKUP LOG [G_GMT] WITH TRUNCATE_ONLY
BACKUP DATABASE [G_GMT] TO DISK = N'f:\backup\G_GMT\G_GMT' WITH INIT , NOUNLOAD , NAME = N'G_GMT backup', NOSKIP , STATS = 10, NOFORMAT

Спасибо!!!

Delirium
22-09-2011, 16:13
не совсем уверен, что получится, но чисто теоретически:

declare @path nvarchar(255)
set @backupname='G_GMT backup ' & cast(GetDate() as char(10))

declare @str nvarchar(MAX)

set @str = 'BACKUP LOG [G_GMT] WITH TRUNCATE_ONLY; GO; BACKUP DATABASE [G_GMT] TO DISK = f:\backup\G_GMT\G_GMT WITH INIT , NOUNLOAD , NAME = ' & @backupname & ', NOSKIP , STATS = 10, NOFORMAT'

exec sp_executesql @str

Могу ошибиться в кавычках, пишу "от руки". Суть в том, чтобы сформировать готовую строку запроса SQL, а затем запустить процедуру, которая выполнить сформированный код.

Anatoliy2004
22-09-2011, 16:22
Delirium,
спасибо попробую!!!

Delirium
23-09-2011, 01:24
Вот так у меня заработало:
declare @backupname nvarchar(255)
set @backupname='G_GMT backup ' + cast(GetDate() as char(10))
declare @str nvarchar(MAX)
set @str =
'BACKUP DATABASE [Control_Test_My] TO DISK = ''c:\G_GMT' +@backupname + ''' WITH INIT , NOUNLOAD , NAME = ''' + @backupname + ''', NOSKIP , STATS = 10, NOFORMAT'
exec sp_executesql @str
В итоге создался файл в корне "C:\G_GMTG_GMT backup Sep 23 201".

Бекап логов в тестировании убрал, т.к. моя база имеет модель Simple, и там логи не бекапятся.

Busla
23-09-2011, 09:44
Delirium, а что мешает в параметре команды backup добавить cast(GetDate() as char(10))?

Delirium
26-09-2011, 01:16
Busla, да ничего не мешает, в общем то. Я выдернул свой код из одного своего работающего кода, в котором очень много переменных и строка хитро строится, вот и показал весь код как строку. А так да, можно просто добавить команду в оригинальный бекап.

Anatoliy2004
27-09-2011, 20:32
Да..ето всё очень класно... но есть ли возможность создавать файл с именем базы+№ дня недели... тоесть чтоб каждый понедельник файл бекапа перезаписывался новым, вторник-новым, и тд...тоесть в папке было бы только 7 файлов!!

Delirium
28-09-2011, 03:24
Anatoliy2004, а что, почитать команды SQL вам религия мешает? В нем есть замечательные функции Day(), Month() и т.д. Таким образом можно добавлять не GetDate(), а Day(GetDate()) или еще что.
По поводу дня недели:
http://www.kodyaz.com/articles/get-week-day-name-of-date-using-t-sql.aspx
http://blog.sqlauthority.com/2007/07/23/sql-server-udf-get-the-day-of-the-week-function/
или все результаты поиска (http://www.google.ru/#hl=ru&sugexp=pfwc&cp=13&gs_id=1d&xhr=t&q=sql+get+day+of+week&pf=p&sclient=psy-ab&newwindow=1&biw=1600&bih=775&source=hp&pbx=1&oq=sql+get+day+o&aq=0&aqi=g2&aql=f&gs_sm=&gs_upl=&bav=on.2,or.r_gc.r_pw.&fp=9d45ebb374048767)

Либо не заморачиваться, а создать 7 разных планировщиков и чтобы они копировали каждый в свою папку по дням недели.

Anatoliy2004
29-09-2011, 13:29
Delirium, спасибо многоуважаемый модератор!!!! :)




© OSzone.net 2001-2012