- 1) Определитесь с типом резервного копирования
- 2) Проверьте, куда будут писаться файлы
- 3) Вариант для SQL Server Express: делаем автоматизацию через Windows Task Scheduler
- 4) Вариант для “полного” MS SQL Server: Maintenance Plan или Agent
- 5) Добавьте в процесс верификацию и мониторинг
- 6) Настройте хранение и очистку (иначе диска не хватит)
- 7) Готовые шаблоны расписания (простая схема)
- Типичные ошибки при настройке
- Мини-чеклист перед тем как включить расписание
- Итог
Автоматический бэкап нужен, чтобы пережить сбой диска, обновления, ошибку оператора и другие неприятности. В MS SQL Server это обычно делают так: создают резервные копии через команду BACKUP DATABASE, а запуск выполняют по расписанию в Windows.
Ниже - практичный план для MS SQL Server (в том числе Express, где нет SQL Server Agent).
1) Определитесь с типом резервного копирования
Для простого и надежного варианта обычно делают полные резервные копии и периодически проверяют, что они восстанавливаются.
Что выбрать по смыслу:
| Вариант | Как выглядит на практике | Когда подходит |
|---|---|---|
| Полный | каждый запуск создает отдельный файл резервной копии | если важна простота и понятное восстановление |
| Разностный | создается файл только с изменениями с момента последнего полного | когда полные копии дорогие по времени |
| Журнал | хранит изменения построчно | для сценариев восстановления на более точные моменты времени (нужно аккуратное планирование) |
Для сценариев уровня “сделать бэкап и хранить за последние дни” чаще выбирают полный вариант. Это прямо поддерживается и в SQL Server Management Studio, и в Transact-SQL.
Основа - BACKUP DATABASE:
- Microsoft Docs: BACKUP (Transact-SQL) и создание резервной копии базы данных через SSMS или командой (в статье про full backup)
https://learn.microsoft.com/ru-ru/sql/relational-databases/backup-restore/create-a-full-database-backup-sql-server?view=sql-server-ver17
2) Проверьте, куда будут писаться файлы
Выберите папку на диске, где есть место, и убедитесь, что служба вашего сервера и учетная запись планировщика заданий могут туда писать.
Минимальные требования:
- Папка существует до запуска задания.
- Права на запись выданы.
- Есть место под нужное количество файлов.
Microsoft отдельно отмечает необходимость достаточного дискового пространства и регулярной очистки старых копий, потому что скрипт очистки в примерах не предусмотрен.
https://learn.microsoft.com/ru-ru/troubleshoot/sql/database-engine/backup-restore/schedule-automate-backup-database
3) Вариант для SQL Server Express: делаем автоматизацию через Windows Task Scheduler
В Express агент заданий может отсутствовать, поэтому чаще используют связку:
1) подготовка хранимой процедуры sp_BackupDatabases
2) запуск через sqlcmd
3) планировщик Windows
Microsoft описывает этот подход именно для SQL Server Express.
https://learn.microsoft.com/ru-ru/troubleshoot/sql/database-engine/backup-restore/schedule-automate-backup-database
Шаг 3.1. Создайте хранимую процедуру sp_BackupDatabases
Подключитесь к вашей базе и выполните скрипт, который создает процедуру для backup. Microsoft дает готовый скрипт для Express. В инструкции он доступен как sample script в репозитории Microsoft.
https://raw.githubusercontent.com/microsoft/mssql-support/master/sample-scripts/backup_restore/SQL_Express_Backups.sql
После выполнения процедура появится в master и станет точкой входа для резервного копирования.
Шаг 3.2. Убедитесь, что доступна утилита sqlcmd
Microsoft рекомендует использовать sqlcmd, а для версий SQL Server 2016 и новее - скачать отдельной установкой, если она не поставилась.
https://learn.microsoft.com/ru-ru/sql/tools/sqlcmd-utility
В инструкции Microsoft по Express она применяется для вызова процедуры.
Шаг 3.3. Сделайте bat-файл для запуска резервного копирования
Создайте файл, например SqlBackup.bat, и укажите команду sqlcmd.
Пример для полного бэкапа всех баз в именованном экземпляре SQLEXPRESS с проверкой Windows:
sqlcmd -S .\SQLEXPRESS -E -Q "EXEC sp_BackupDatabases @backupLocation='D:\SQLBackups\', @backupType='F'"
Это соответствует примерам Microsoft в статье про автоматизацию Express через Windows.
https://learn.microsoft.com/ru-ru/troubleshoot/sql/database-engine/backup-restore/schedule-automate-backup-database
Если нужно с дифференциальными или другими вариантами, меняется @backupType:
- 'F' - full
- 'D' - differential
- 'L' - log (если выстраивается журнал)
Шаг 3.4. Запланируйте bat-файл в планировщике задач Windows
Откройте taskschd.msc и создайте задачу:
1) Триггер: ежедневно или по вашему расписанию
2) Действие: “Запуск программы”
3) Программа: путь к SqlBackup.bat
4) Учетная запись: та, под которой есть права на резервное копирование и доступ на запись в папку
Microsoft советует перед фиксацией расписания протестировать bat-файл вручную в консоли от имени той же учетной записи.
https://learn.microsoft.com/ru-ru/troubleshoot/sql/database-engine/backup-restore/schedule-automate-backup-database
4) Вариант для “полного” MS SQL Server: Maintenance Plan или Agent
Если у вас не Express и есть SQL Server Agent, автоматизацию можно сделать через Maintenance Plan в SSMS.
Концепция такая:
- создаете план обслуживания
- добавляете шаг резервного копирования
- добавляете очистку старых копий
- настраиваете расписание
Пример структуры плана обслуживания с полными и разностными копиями и очисткой файлов встречается в практических инструкциях по SSMS, где обычно делают вложенные шаги и ограничивают хранение по дням.
https://efsol.ru/manuals/sql-backup/
Для базовых действий резервного копирования через SSMS “Создать резервную копию” есть официальная справка Microsoft.
https://learn.microsoft.com/ru-ru/sql/relational-databases/backup-restore/create-a-full-database-backup-sql-server?view=sql-server-ver17
5) Добавьте в процесс верификацию и мониторинг
Минимум, что стоит сделать:
- после создания резервной копии проверить, что файл реально читается
- вести лог, чтобы по журналу ошибки понять, что пошло не так
Один из популярных подходов - добавлять RESTORE VERIFYONLY после BACKUP, чтобы убедиться, что файл соответствует резервному набору. Такой кусок есть в примерах скриптов для проверки резервной копии.
https://ironskills.by/tpost/x0pzcaln31-kak-nastroit-avtomaticheskoe-rezervnoe-k
Если не хотите усложнять, хотя бы сделайте логирование вывода sqlcmd в файл, чтобы ошибки были видны без ручного “гугления”.
6) Настройте хранение и очистку (иначе диска не хватит)
Определите правило хранения, например:
- хранить 7 последних полных копий
- дифференциальные хранить 5 рабочих дней (если используете их)
Если делаете через bat и планировщик, очистку нужно прописывать отдельно. В практических инструкциях очистка делается отдельным шагом Maintenance Plan или через удаление файлов по маске и дате.
Пример очистки в maintenance-логике:
- удалять файлы .bak старше 7 дней
- хранить копии по дням/папкам, чтобы проще чистить
На уровне примеров maintenance это описывается в инструкции по плану обслуживания.
https://efsol.ru/manuals/sql-backup/
7) Готовые шаблоны расписания (простая схема)
Для большинства прикладных задач в 1С и похожих нагрузках обычно хватает “полный раз в день” + короткое хранение.
Пример схемы:
- Полный бэкап ежедневно
- Хранение: 7 дней
- Дополнительно: раз в месяц полный чаще, если так требует политика
Если хотите разностные копии, можно делать комбинацию, как в примерах: полная раз в неделю плюс дифференциальные в рабочие дни.
https://efsol.ru/manuals/sql-backup/
Типичные ошибки при настройке
| Ошибка | Как проявляется | Как исправить |
|---|---|---|
| Папка не существует или нет прав на запись | задание падает сразу или не создается файл | проверьте права учетной записи задачи и наличие пути заранее |
| Неверный экземпляр (имя server/instance) | sqlcmd выполняется, но backup не идет | проверьте строку -S (например .\SQLEXPRESS или server\instance) |
| Не создан sp_BackupDatabases для Express | команда EXEC не находится | сначала выполните sample script SQL_Express_Backups.sql |
| Нет теста восстановления | вы находите проблему только при аварии | хотя бы раз прогоните RESTORE VERIFYONLY и тестовое восстановление |
| Нет очистки старых файлов | диск заполняется | добавьте очистку старше N дней |
Мини-чеклист перед тем как включить расписание
- [ ] Папка для резервных копий выбрана и доступна на запись
- [ ] Резервная копия создается вручную (bat или SSMS)
- [ ] Для Express создана sp_BackupDatabases из sample script
- [ ] Запуск по расписанию настроен на ту же учетную запись, от имени которой вы тестировали
- [ ] Есть внятное правило хранения и очистки старых файлов
- [ ] Вы видите лог/ошибки, если резервное копирование не сработало
Итог
Для MS SQL Server Express самый прямой путь - сделать bat-файл через sqlcmd, который вызывает sp_BackupDatabases, и запускать его планировщиком Windows. Официальная схема такого подхода описана у Microsoft.
https://learn.microsoft.com/ru-ru/troubleshoot/sql/database-engine/backup-restore/schedule-automate-backup-database
Для полноценного SQL Server проще собрать maintenance plan в SSMS с расписанием и очисткой. Официальные материалы Microsoft подтверждают, что резервные копии создаются через BACKUP DATABASE и через “Создать резервную копию” в SSMS.
https://learn.microsoft.com/ru-ru/sql/relational-databases/backup-restore/create-a-full-database-backup-sql-server?view=sql-server-ver17