- Выберите подходящий вариант
- Автоматический бэкап в SQL Server Agent (если агент доступен)
- Автоматический бэкап для SQL Server Express: Планировщик Windows + sqlcmd
- Как организовать расписание Full/Diff/Log (пример)
- Проверка бэкапа и “живость” восстановления
- Хранение: папка, ротация и удаление старых файлов
- Что важно учесть заранее
- Быстрая шпаргалка: когда какой способ
Автоматический бэкап в MS SQL Server можно сделать несколькими способами. Самый простой для лицензий и редакций с агентом - через SQL Server Agent. Для SQL Server Express (агент обычно не включён) обычно используют связку: sqlcmd + командный файл .bat + Планировщик заданий Windows.
Ниже - рабочие варианты под типичный сценарий: делать полные и/или разностные бэкапы по расписанию и хранить файлы в папке, а при желании - копировать их на другой сервер.
Выберите подходящий вариант
| Ситуация | Что использовать | Когда подходит |
|---|---|---|
| SQL Server с SQL Server Agent | SQL Server Agent + расписание + шаги BACKUP/копирование | Удобно, если есть агент |
| SQL Server Express | Планировщик Windows + sqlcmd + .bat |
Самый частый вариант для Express |
| Нужно несколько типов бэкапов (Full/Diff/Log) | Комбинация заданий по расписанию | Когда хотите гибкость восстановления |
| Нужно хранить бэкапы с очисткой старых файлов | Дополнительно задача “очистка” | Чтобы не забить диск |
Автоматический бэкап в SQL Server Agent (если агент доступен)
- Откройте SQL Server Management Studio и подключитесь.
- Создайте устройство резервного копирования (если используете подход “устройства”):
- Раздел Объекты сервера → ПКМ → Создать устройство резервного копирования
- Задайте имя и путь к файлу.
- Создайте задание:
- Агент SQL Server → ПКМ → Задания → Создать задание
- Добавьте шаг с командой резервного копирования:
- Тип шага: Сценарий Transact-SQL (T-SQL)
- Команда вида:
sql BACKUP DATABASE [YourDB] TO [YourBackupDevice] WITH INIT, NOFORMAT, SKIP, NOUNLOAD; - (Опционально) Добавьте второй шаг - копирование файла на другой server:
- Тип шага: Операционная система (CmdExec)
- Команда копирования, например:
bat XCOPY D:\MSSQL\BACKUP\YourDB_monday.bak \\BACKUP_SERVER\Folder\*.* /Y - Перейдите на вкладку Расписания:
- Создайте расписание Повторяющееся
- Укажите дни и время запуска (обычно ночное окно).
- Протестируйте: ПКМ по заданию → Запустить (и проверьте папку с файлами и журнал).
Важно про права: учетная запись, от имени которой работает SQL Server Agent, должна иметь права на чтение/запись в каталог с резервными файлами и доступ к целевой файловой системе (включая сетевую папку).
Автоматический бэкап для SQL Server Express: Планировщик Windows + sqlcmd
В Express чаще всего нет SQL Server Agent, поэтому задача решается через Windows.
Шаг 1. Создайте хранимую процедуру sp_BackupDatabases
Скачайте готовый скрипт Microsoft для Express (он создаёт процедуру, которую можно вызывать из командной строки). Затем выполните его в вашей master базе на server с Express.
Суть: после этого вы сможете запускать бэкап командой EXEC sp_BackupDatabases ....
(Источник: скрипт и подход описаны в Microsoft Learn для Express.)
Шаг 2. Убедитесь, что доступен sqlcmd
Для SQL Server 2016 и новее sqlcmd обычно доступен отдельной загрузкой, для более старых - может быть установлен по умолчанию.
Шаг 3. Сформируйте .bat файл для бэкапа
Создайте файл, например Sqlbackup.bat, и укажите свои параметры.
Пример для полного бэкапа выбранной базы (Windows-аутентификация):
sqlcmd -S .\SQLEXPRESS -E -Q "EXEC sp_BackupDatabases @databaseName='YourDB', @backupLocation='D:\SQLBackups\', @backupType='F'"
Пример для разностного бэкапа:
sqlcmd -S .\SQLEXPRESS -E -Q "EXEC sp_BackupDatabases @databaseName='YourDB', @backupLocation='D:\SQLBackups\', @backupType='D'"
Если нужно бэкапить все базы (в пределах процедуры), можно вызвать sp_BackupDatabases без @databaseName - смотрите параметры в созданной процедуре.
Примечание: если используете SQL-аутентификацию и пароль в командной строке, это небезопасно. Постарайтесь по возможности использовать Windows-аутентификацию или храните секреты аккуратно.
Шаг 4. Запланируйте запуск в Планировщике заданий
- Откройте taskschd.msc (Планировщик заданий).
- Создать задачу (не “базовую” - так удобнее управлять правами).
- На вкладке Общие:
- Назовите задачу, например
SQLBackup - Укажите учетную запись, от имени которой будет выполняться задача
- На вкладке Триггеры:
- Создать
- Тип: Ежедневно (или Еженедельно)
- Укажите время (обычно ночью)
- На вкладке Действия:
- Создать → Запуск программы
- Программа: путь к
Sqlbackup.bat(файл.bat)
Запустите тестом: ПКМ по задаче → Выполнить. Проверьте, что файл .bak реально появился в папке и что бэкап не падает по правам.
Как организовать расписание Full/Diff/Log (пример)
Если вы делаете Full и разностные копии, логика обычно такая: сначала Full, потом Diff несколько раз, а лог - если вы ведёте модель восстановления с журналированием.
Ниже - типовой вариант “чтобы работало и было понятно”:
| Тип | Когда делать | Зачем |
|---|---|---|
| Full | например ежедневно (или раз в неделю) | точка для восстановления |
| Diff | в рабочие дни несколько раз | меньше места и быстрее, чем Full |
| Log | по необходимости (например раз в неделю) | когда нужна цепочка по журналу |
Пример расписания (часто встречающийся подход):
| День/время | Что делаем |
|---|---|
| Пн 12:00 и 18:00 | Diff |
| Вт 12:00 и 18:00 | Diff |
| Ср 12:00 и 18:00 | Diff |
| Чт 12:00 и 18:00 | Diff |
| Пт 12:00 и 18:00 | Diff |
| Вс (вечером) | Full или лог (зависит от модели восстановления) |
| Ещё раз Full | например в начале месяца |
Если у вас SIMPLE модель восстановления (частый вариант для прикладных сценариев), то лог-цепочки обычно не нужны так, как в модели с point-in-time. Тогда чаще достаточно Full/Diff.
Проверка бэкапа и “живость” восстановления
Самое частое “попадание на мину” - бэкап создаётся, но потом не восстанавливается.
Минимальные меры:
- В сценариях резервного копирования полезно делать проверку средствами SQL:
RESTORE VERIFYONLY- Если бэкапы уходят на server по сети, проверьте права записи в сетевую папку и доступность пути.
Пример проверки (используется в самописных скриптах):
RESTORE VERIFYONLY FROM DISK = @path WITH FILE = @backupSetId;
Хранение: папка, ротация и удаление старых файлов
Автоматический запуск бесполезен, если диск забьётся.
Чаще всего делают так:
- Бэкап сохраняется в папку на диске, например D:\SQLBackups
- Отдельной задачей (или вторым шагом) удаляются файлы старше N дней
Если вы делаете Full/Diff разными заданиями, используйте:
- одинаковую структуру папок (например, Full/, Diff/)
- очистку отдельно по каждому типу
Что важно учесть заранее
- Права учетной записи (для Windows-планировщика или SQL Agent):
- доступ к sqlcmd
- доступ к файлам (чтение/запись)
- доступ к server и database для операции резервного копирования
- Место на диске: заранее оцените размер и скорость роста.
- Путь и доступность: сетевые пути должны быть доступны всегда, а не “только когда работает сервер”.
- Версии SQL Server: бэкап созданный на более новой версии может не восстановиться на старой.
Быстрая шпаргалка: когда какой способ
| Нужно | Рекомендация |
|---|---|
| SQL Server Agent есть | Делайте через SQL Agent: BACKUP + расписание + шаг копирования |
| SQL Server Express | Делайте через Планировщик Windows: .bat с sqlcmd + вызов sp_BackupDatabases |
| Делаем несколько типов резервных копий | Разносите по расписанию отдельными заданиями (Full/Diff/Log) |
| Хотите бэкапы и на удалённое хранилище | Добавляйте шаг копирования в сетевую папку (XCOPY/аналог) |
Если вы всё это настроите, у вас получится стабильный автоматический резервный процесс: файл появляется в нужной папке по расписанию, и вы не останетесь без копий в момент, когда они реально понадобятся.