Скрипт автоматического бекапа базы данных Microsoft SQL Server 2005 с архивированием и копированием БД на другой сервер

скрипт для автоматического бекапа базы данных Microsoft-SQL-Server-2005

Для того, что бы сделать бекап базы данных SQL Server 2005 нужно выполнять такой скрипт

Сделаем бекап двух БД, которые есть, это doc  и mexp, создадим bat файл под названием back__.bat

set DIR_BACKUP=D:\Mega_backup\backupMSSQL_%date%\
set NAME_PC=server
md %DIR_BACKUP%
osql -S %NAME_PC% -E -Q “BACKUP DATABASE doc TO DISK = ‘%DIR_BACKUP%\doc.bak‘ with init”
md D:\Mega_backup\backupMSSQL_%date%
md \\10.0.0.200\sql\backupMSSQL_%date%
Echo End wait

set DIR_BACKUP=D:\Mega_backup\backupMSSQL_%date%\
set NAME_PC=server
md %DIR_BACKUP%
osql -S %NAME_PC% -E -Q “BACKUP DATABASE mexp TO DISK = ‘%DIR_BACKUP%\mexp.bak’ with init”
md D:\Mega_backup\backupMSSQL_%date%
md \\10.0.0.200\sql\backupMSSQL_%date%
Echo End wait

start winrar a \\10.0.0.200\sql\backupMSSQL_%date%\%date%.rar D:\Mega_backup\backupMSSQL_%date%\*.*

rem //Строчка внизу архивирует базы, которые мы создали скриптом

%NAME_PC% – переменная, которая содержит имя копьютера

osql -S %NAME_PC% -E -Q “BACKUP DATABASE mexp TO DISK = ‘%DIR_BACKUP%\mexp.bak’ with init” собственно скрипт запуска бекапирования БД mexp TO DISK = ‘%DIR_BACKUP%\mexp.bak

TO DISK = ‘%DIR_BACKUP%\mexp.bak сохраним на диск с таким названием в папку %DIR_BACKUP%

\\10.0.0.200\sql\backupMSSQL_%date% расшареная папка на другой машине, с правами доступа для пользователя, который выполняет скрипт бекапа, как правило это админский пароль и если машина находится в домене, то проблем не должно быть.

\\10.0.0.200\sql\backupMSSQL_%date%\%date%.rar – как назовем файл, в данном случае создастся файл с датой запуска и расширением *.rar

Сохраняем скрипт и добавляем его в планировщик заданий. Добавляем на выполнение на пол первого ночи

Планировщик заданий

Сначала мы бекапируем на локальный диск, а потом по сети архивируем в расшареную папку на другом компьютере.

Второй скрип делается для того, что бы зачистить локальные копии, то есть папки D:\Mega_backup\backupMSSQL_%date%\

del /Q D:\Mega_backup\backupMSSQL_%date%\
Ну запускаем его гораздо позже после запуска первого скрипта
/Q – соглашаться с удалением при запуске команды

Готовые скрипты можна взять здесь

5 thoughts on “Скрипт автоматического бекапа базы данных Microsoft SQL Server 2005 с архивированием и копированием БД на другой сервер”

  1. Хотелось бы по лучше разобраться с этим скриптом,т.к. у меня не получается его сделать.

  2. Все от слов “set DIR_BACKUP=D:\Meg…” и до “start winrar a \\10.0.0.200\sql\backupMSSQL_%date%\%date%.rar D:\Mega_backup\backupMSSQL_%date%\*.*” сохраняете в bat-файл и запускаете на сервере, красным выделены базы данных MSSQL

    Должен получиться архивный файл с базами данных

    1. я переверстал Ваш код под себя и получилось вот что :

      set DIR_BACKUP=D:\SQL_backup\backup\ASP_%date%
      set NAME_PC=test
      md %DIR_BACKUP%
      “C:\Program Files\Microsoft SQL Server\90\Tools\Binn\OSQL.EXE” -S %NAME_PC% -E -Q “BACKUP DATABASE ASPnetKP TO DISK = ‘%DIR_BACKUP%\ASPnetKP.bak’ with init” > D:\\SQL_backup\backuplog.txt
      md D:\SQL_backup\backup\ASP_%date%
      md D:\SQL_backup\arhiv\ASP_arhiv_%date%

      “C:\Program Files\7-Zip\7z.exe” a D:\SQL_backup\arhiv\ASP_arhiv_%date%\ASP_arhiv_%date%.7z “D:\SQL_backup\backup\ASP_%date%\*.*” > D:\\SQL_backup\arhivlog.txt

      т.е. скрипт делает бэкап,архивирует с помощью 7zip и кидает куда нужно,причём ведет лог бэкапа и архивации. Теперь у меня стоит такая задача, нужно сделать имена файлов не просто ASP_%date% (date – дд.мм.гггг), а ASP_гггг.мм.дд_время. Не могу это реализовать,так как не хватает знаний. Ищу помощи. Жду ответа.

      1. %TIME: =0%
        set now=%DATE: =0% %TIME: =0%

        for /f “tokens=1-7 delims=/-:., ” %%a in ( “%now%” ) do (
        set now=%%c%%b%%a_%%d%%e
        )

        start winrar a “D:\12\ASP_%now%.rar” “D:\12\*.*”

        В этом случае все записи в папке “D:\12\” будут помещены в архив “D:\12\ASP_20110707_1619.rar”
        Ну папки под себя настраивайте как угодно

        — %%a – день
        — %%b – месяц
        — %%c – год
        — %%d – часы
        — %%e – минуты
        — %%f – секунды
        — %%g – сотые

        Если помогло, то вопрос закрыт, как я считаю
        Обращайтесь. И не спрашивайте как это)

        1. оперативненько, но я кстати тоже не скучао и всё таки довёл до ума этот батник и выглядит он теперь так:

          SET ASDF=”%date:~-4,4%.%date:~-7,2%.%date:~-10,2%_%time:~-11,2%.%time:~-8,2%.txt”
          set DATE=”%date:~-4,4%.%date:~-7,2%.%date:~-10,2%_%time:~-11,2%.%time:~-8,2%”

          md %dir_backup%

          set DIR_BACKUP=D:\SQL_BackUp\BackUp\
          set NAME_PC=test
          md %DIR_BACKUP%
          “C:\Program Files\Microsoft SQL Server\90\Tools\Binn\OSQL.EXE” -S %NAME_PC% -E -Q “BACKUP DATABASE ASPnetKP TO DISK = ‘%DIR_BACKUP%\ASPnetKP.bak’ with init” > D:\\SQL_BackUp\log_BackUp_%ASDF%
          md D:\SQL_BackUp\BackUp\
          md D:\SQL_BackUp\Arhiv\

          “C:\Program Files\7-Zip\7z.exe” a D:\SQL_BackUp\Arhiv\ASP_Arhiv_%DATE%.7z “D:\SQL_BackUp\BackUp\*.*” > D:\\SQL_BackUp\log_Arhiv_%ASDF%

          md C:\Arhiv_copy

          xcopy D:\SQL_BackUp\Arhiv\ASP_Arhiv_%DATE%.7z C:\Arhiv_copy

          del /f/q D:\SQL_BackUp\BackUp\*.bak

          Как я всё таки смог? очень просто, посещал кучу форумов и читал огромное количество соответствующей литературы. На многих сайтах и форумах есть готовые решения,но они не соответствуют моей полной задаче 🙂 поэтому решил разобраться с этим и написать под себя универсальный,а главное понятный и простой bat – файл. Всё готово,всё работает! Тока еще в планах тут же добавить удаление бэкапов по условию (т.е. старых и не нужных),но сейчас пока не могу это сделать,да и времени не хватает. Если кто может помочь отпишитесь.

Leave a Reply

Your email address will not be published. Required fields are marked *