Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   SQL Backup-создание ежедневно нового архива (http://forum.oszone.net/showthread.php?t=216209)

Anatoliy2004 22-09-2011 12:00 1758046

SQL Backup-создание ежедневно нового архива
 
Всем привет!
Как сделать так что бы каждый день делался бекап..Но не перезатирал его а создавался новый например с последовательным числом!
Например:
неделя-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 1758198

не совсем уверен, что получится, но чисто теоретически:

Код:

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 1758208

Delirium,
спасибо попробую!!!

Delirium 23-09-2011 01:24 1758487

Вот так у меня заработало:
Код:

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 1758583

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

Delirium 26-09-2011 01:16 1760125

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

Anatoliy2004 27-09-2011 20:32 1761322

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

Delirium 28-09-2011 03:24 1761518

Anatoliy2004, а что, почитать команды SQL вам религия мешает? В нем есть замечательные функции Day(), Month() и т.д. Таким образом можно добавлять не GetDate(), а Day(GetDate()) или еще что.
По поводу дня недели:
http://www.kodyaz.com/articles/get-w...ing-t-sql.aspx
http://blog.sqlauthority.com/2007/07...week-function/
или все результаты поиска

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

Anatoliy2004 29-09-2011 13:29 1762399

Delirium, спасибо многоуважаемый модератор!!!! :)


Время: 12:12.

Время: 12:12.
© OSzone.net 2001-