[MANUAL] Настраиваем автобекап mssql

Тема в разделе "Установка и настройка (Setup and configuration)", создана пользователем root, 30 сен 2014.

  1. root

    root Administrator Команда форума Administrator Moderator Developers Team

    Регистрация:
    23 авг 2014
    Сообщения:
    254
    Симпатии:
    58
    Баллы:
    11
    В Enterprise Manager есть функция Job (т.е планировщик) - вот только если жестко вбить туда скрипт "BACKUP DATABASE ... TO DISK=...." , то предыдущий бекап будет - что? - правильно, заменяться. Поэтому появился нижеописанный скрипт, который делал бекап на специально выделенный для этого диск.
    Код:
    -- MSSQL Backup Script by AusTiNDECLARE @path1 varchar(128)
    DECLARE @DBName AS nvarchar(4000) 
    SET @DBName = 'db_wrk' -- имя БД
    DECLARE @File1 AS nvarchar(4000)
    -- сюда будут ложиться бекапы
    SET @path1 = 'F:\' 
    -- Формируем часть имени файла, в которой фиксируется имя БД и время создания копии
    DECLARE @todaysdate datetime
    DECLARE @date varchar
    SET @todaysdate = getdate()
    DECLARE @FileName AS nvarchar(4000) 
    SET @FileName =  @DBName + '_' + 'backup_' +
        CASE DAY(CURRENT_TIMESTAMP)
            WHEN 1 THEN '01' WHEN 2 THEN '02' WHEN 3 THEN '03'
            WHEN 4 THEN '04' WHEN 5 THEN '05' WHEN 6 THEN '06'
            WHEN 7 THEN '07' WHEN 8 THEN '08' WHEN 9 THEN '09'
            ELSE CONVERT(nvarchar(2),DAY(CURRENT_TIMESTAMP), 112 ) END + '_' +
        CASE MONTH(CURRENT_TIMESTAMP)
            WHEN 1 THEN '01' WHEN 2 THEN '02' WHEN 3 THEN '03'
            WHEN 4 THEN '04' WHEN 5 THEN '05' WHEN 6 THEN '06'
            WHEN 7 THEN '07' WHEN 8 THEN '08' WHEN 9 THEN '09'
            ELSE CONVERT(nvarchar(2),MONTH(CURRENT_TIMESTAMP), 112 ) END
            + '_' + CONVERT(nvarchar(4),YEAR(CURRENT_TIMESTAMP), 112 ) + '_' + REPLACE(convert(varchar(12), @todaysdate, 108), ':','-');
    -- Добавляем к пути и имени файла идентификаторы и расширения
    SELECT @File1 = @path1 + @FileName  + '.bak'
     -- Запускаем резервное копирование
    BACKUP DATABASE @DBName TO DISK = @File1 WITH NOFORMAT, NOINIT, SKIP, REWIND, NOUNLOAD
    Если выполнить этот скрипт через Enterprise Manager или Query Analyzer, то мы получим бекап базы в формате db_wrk_backup_06_11_2009_18-13-58.bak. Но каждый раз выполнять руками не нужно - в MSSQL есть свой собственный планировщик. (Напомню, речь идет о SQL Server 2000 - разумеется, в более новых версиях планировщик также есть, но расскажу я о 2000-м Server'e).Итак, ставим себе целью настроить автоматическое копирование базы каждый час на выделенный диск F:\
    Открываем Enterprise Manager, слева выбираем целевой SQL-сервер. Вверху ищем и жмём Tools -> Job Scheduling. Появится окно, в котором нас просят выбрать, что же мы хотим выполнить - SQL-запрос, bat-файл или VBScript/JavaScript-сценарий. Выбираем SQL-запрос, жмём Далее.
    Появится окно с выбором базы и текстовым полем для ввода запроса. Выбираем целевую базу, и копируем написанный выше скрипт в то поле, не забывая исправить переменные @DBName и @path1. Скопировали - на всякий случай нажали кнопку Parse. Получили подтверждение о том, что запрос написан правильно ("Job command parse succeed")? Отлично. Теперь необходимо настроить время выполнения запроса. После написания запроса мы переходим на окно с 5 флажками - "Now", "One time", "Automatically when SQL Server Agent starts", "When a computer is idle" и "On a recurring basis". Нас интересует последний флажок - это вариант самостоятельного задания расписания. Выбираем его, но Далее не жмем - становится активна кнопка Schedule - вот её-то и надо нажать.
    Здесь мы видим параметры расписания бекапа. Напомню, что я ставил целью настроить автокопирование каждый час, поэтому выставляем следующие параметры:

    • Occurs: Daily
    • Daily: Every 1 day(s)
    • Daily frequency: Occurs every 1 hour(s) Starting at 0:00:00 Ending at 23:59:59
    • Duration: Start date (там будет подставлено текущее число), и ставим флажок No end date.
    Жмём ОК, Далее. И последний экран в настройке планировщика - настройка уведомлений. SQL Server умеет уведомлять через net send и по e-mail. Необходимо выбрать получателей для уведомлений - но у меня почему-то стоит в обоих полях значение (No Operator). Ну и ладно, не больно-то и хотелось. Жмём Далее, Готово.
    На этом настройка автоматического копирования базы завершена. Проверить или изменить настройки созданной задачи можно через Enterprise Manager, открыв Management -> SQL Server Agent -> Jobs.