Резервная копия базы 1С 8.3 на MS SQL: пошагово
Содержание
Чтобы сделать копию базы 1С 8.3 на SQL, не выгружайте её в .dt — для серверной базы на MS SQL это долго, рискованно и не годится для регулярного бэкапа. Копию снимают средствами самого SQL Server: командой BACKUP DATABASE или через SSMS, за секунды и без выгона пользователей.
Разберём, как сделать копию базы 1С 8.3 SQL тремя способами — вручную через SSMS, скриптом T-SQL и по расписанию через план обслуживания. Плюс как развернуть эту копию в новую базу для тестирования и подключить её к 1С.
SQL-бэкап копирует базу целиком на уровне СУБД. Пользователи в этот момент могут работать — копия снимется на согласованное состояние.
Видео по теме
Копия на SQL или выгрузка в .dt — в чём разница
Первый вопрос, который путает новичков: «а почему нельзя просто Администрирование → Выгрузить информационную базу?». Можно, но для серверной базы на MS SQL это неудачный выбор.
| Критерий | Выгрузка .dt | Бэкап MS SQL |
|---|---|---|
| Кто должен выйти | Все пользователи | Никто, работают дальше |
| Скорость (база 20 ГБ) | 30–90 минут | 1–5 минут |
| По расписанию | Нет (только руками) | Да, план обслуживания |
| Восстановление на точку | Нет | Да, до секунды (модель Full) |
| Годится как основной бэкап | Нет | Да |
Вывод простой: .dt — для переноса структуры и мелких файловых баз, а не для резервного копирования боевой SQL-базы. Для серверной базы основной инструмент — бэкап SQL Server.
Что проверить перед созданием копии
Пять минут подготовки экономят час на разборе, почему бэкап не пишется.
Имя базы в SQL часто отличается от того, что видит бухгалтер в списке баз 1С. Посмотреть точное имя: в окне запуска 1С выделите базу → кнопка Изменить → поле «База данных». Например, в списке она «Бухгалтерия», а в SQL называется buh_prod.
Способ 1. Копия базы 1С через SSMS
Самый наглядный путь — графика SQL Server Management Studio. Ничего писать руками не нужно.
SERVER1\SQLEXPRESS) и способ авторизации. Раскройте узел Databases.buh_prod, а не «Бухгалтерия»). Правый клик → Tasks → Back Up….Full (полная копия). Это то, что нужно в 99% случаев для «сделать копию базы целиком».Add… задайте свой: например D:\Backups\buh_prod_2024.bak.OK. Появится «BACKUP DATABASE successfully completed». Файл .bak — это и есть ваша копия.Не храните .bak на том же физическом диске, где лежит .mdf базы. Умрёт диск — потеряете и базу, и её копию разом.
Способ 2. Бэкап базы 1С скриптом T-SQL
Когда SSMS под рукой нет или нужно встроить бэкап в свой скрипт — та же операция одной командой. Откройте New Query и выполните:
BACKUP DATABASE [buh_prod]
TO DISK = N'D:\Backups\buh_prod_full.bak'
WITH FORMAT, -- перезаписать файл, а не дописать в конец
COMPRESSION, -- сжать копию (обычно в 4–8 раз)
STATS = 10; -- показывать прогресс каждые 10%
Замените buh_prod на имя своей базы, а путь — на свой каталог. Ключ WITH FORMAT важен: без него SQL Server будет дописывать каждую новую копию в тот же файл, и он распухнет.
Разностную копию (только изменения с момента последней полной) снимают так:
BACKUP DATABASE [buh_prod]
TO DISK = N'D:\Backups\buh_prod_diff.bak'
WITH DIFFERENTIAL, COMPRESSION, STATS = 10;
А копию журнала транзакций (нужна только в модели Full — о ней ниже):
BACKUP LOG [buh_prod]
TO DISK = N'D:\Backups\buh_prod_log.trn'
WITH COMPRESSION, STATS = 10;
Способ 3. Автоматический бэкап через План обслуживания
Ручная копия хороша перед обновлением или тестом. Но постоянный бэкап должен идти сам. Для этого в SQL Server есть Maintenance Plan (план обслуживания). Нужен агент SQL Server (SQL Server Agent) — в редакции Express его нет, там расписание вешают на Планировщик Windows с sqlcmd.
Типовая схема для боевой базы:
- 🗂️ Полная копия — раз в сутки ночью (
Back Up Database Task, тип Full); - 📎 Разностная — каждые несколько часов днём (тип Differential);
- 📜 Копия журнала — каждые 15–60 минут, если модель Full;
- 🧹 Очистка старых —
Maintenance Cleanup Task, удалять.bakстарше N дней.
Создать: в SSMS Management → Maintenance Plans → New Maintenance Plan, перетащить задачи из панели Toolbox, задать базу, каталог и расписание в свойствах.
Задайте очистку старых копий сразу. Иначе за пару недель .bak-файлы забьют диск, и новый бэкап упадёт с ошибкой нехватки места.
Модели восстановления Simple и Full — что выбрать
От модели восстановления зависит, насколько «свежую» точку вы сможете восстановить. Посмотреть текущую: правый клик на базе → Properties → Options → Recovery model.
| Модель | Копия журнала | Восстановление | Кому подходит |
|---|---|---|---|
| Simple | Невозможна | Только до момента последней полной/разностной копии | Тесты, небольшие базы, где потеря часа данных не критична |
| Full | Обязательна | До любой секунды между копиями | Боевая база с активным вводом документов |
Как это работает в Simple: журнал транзакций очищается автоматически. Просто и без обслуживания, но восстановитесь только на момент бэкапа — всё, что ввели после, потеряно.
Как это работает в Full: каждое изменение хранится в журнале, пока вы не снимете BACKUP LOG. Это даёт восстановление на точку, но если не делать копию журнала — он раздуется и переполнит диск. Full без регулярного BACKUP LOG — частая причина «внезапно кончилось место».
Полная, разностная и копия журнала
- Полная (Full) — вся база целиком. Основа любой стратегии.
- Разностная (Differential) — только то, что изменилось с последней полной. Меньше и быстрее.
- Журнал транзакций (Log) — все операции с момента прошлой копии журнала. Только для модели Full.
Логика восстановления: сначала разворачивают последнюю полную, поверх — последнюю разностную, затем по цепочке — копии журнала до нужного момента.
Сжатие резервной копии
Ключ COMPRESSION (см. Способ 2) сжимает .bak прямо при создании — база 1С жмётся обычно в 4–8 раз. Бэкап на 20 ГБ базы займёт 3–5 ГБ. Плюс копия пишется быстрее, потому что на диск ложится меньше данных.
Включить сжатие по умолчанию для всего сервера:
EXEC sp_configure 'backup compression default', 1;
RECONFIGURE;
В SQL Server Express сжатие бэкапов недоступно — ключ COMPRESSION там просто игнорируется. Это ограничение редакции, не ошибка.
Как развернуть копию в новую базу для тестирования
Классический сценарий: поднять копию боевой базы рядом, чтобы обкатать обновление или проверить закрытие месяца, не трогая рабочую. Восстанавливаем .bak в новую базу с другим именем.
- В SSMS: правый клик на
Databases → Restore Database…. - Source →
Device→ укажите файл.bak. - В поле Destination → Database впишите новое имя, например
buh_test. - Вкладка
Files→ включитеRelocate all files, задайте пути для.mdfи.ldfтеста (иначе файлы пойдут поверх боевых). OK.
Скриптом то же самое:
RESTORE DATABASE [buh_test]
FROM DISK = N'D:\Backups\buh_prod_full.bak'
WITH MOVE 'buh_prod' TO N'D:\SQLData\buh_test.mdf',
MOVE 'buh_prod_log' TO N'D:\SQLData\buh_test_log.ldf',
REPLACE, STATS = 10;
Логические имена файлов (buh_prod, buh_prod_log) узнают командой RESTORE FILELISTONLY FROM DISK = N'...\buh_prod_full.bak';.
При восстановлении на тот же сервер обязательно меняйте и имя базы, и пути к файлам. Иначе RESTORE ... REPLACE перезапишет боевую базу поверх. Проверяйте дважды.
Как подключить восстановленную копию к 1С
База в SQL появилась, но 1С про неё ещё не знает. Добавляем в список:
- В окне запуска 1С →
Добавить → Добавление существующей. - Тип — «На сервере 1С:Предприятия».
- Кластер серверов — имя вашего сервера
1С:Предприятия. - Имя информационной базы в кластере — новое имя (
buh_test). - Сервер баз данных и имя базы данных — ваш SQL-сервер и
buh_test.
Копию для тестирования пометьте, чтобы не спутать с боевой: назовите в списке «⚠ ТЕСТ Бухгалтерия». А при первом запуске тестовой копии ответьте «Нет» на предложение обновиться и снимите галку регламентных заданий — иначе тест начнёт слать отчётность и обмениваться данными от имени организации.
Проверка копии без восстановления
Бэкап, который не восстанавливается, — не бэкап. Проверить целостность .bak, не разворачивая её:
RESTORE VERIFYONLY FROM DISK = N'D:\Backups\buh_prod_full.bak';
Ответ The backup set on file 1 is valid означает, что файл читается и контрольные суммы сходятся. Раз в месяц полезно делать и «боевую» проверку — реально разворачивать копию в тестовую базу и запускать 1С. Только так вы точно знаете, что восстановитесь в аварийной ситуации.
Типичные ошибки и что делать
Что чаще всего всплывает на форумах при бэкапе базы 1С на MS SQL:
NT Service\MSSQLSERVER или доменной) права на запись в папку D:\Backups, либо выберите каталог, куда доступ уже есть..bak от одной базы поверх другой без REPLACE. Добавьте WITH REPLACE или восстанавливайте в новую базу с новым именем..bak. Настройте Maintenance Cleanup Task для удаления старых копий, включите COMPRESSION, вынесите бэкапы на отдельный диск.ALTER DATABASE [buh_test] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;.BACKUP LOG не делается. Либо настройте регулярную копию журнала, либо, если восстановление на точку не нужно, переключите базу в Simple.Если не помогло
Бэкап падает, а причина в сообщении неочевидна — сузьте проблему по шагам:
- 🔎 Посмотрите полный текст ошибки в
SQL Server Logs(SSMS →Management → SQL Server Logs) — там причина подробнее, чем в окне. - 🧪 Попробуйте снять копию другой, маленькой базы на этот же диск. Пишется — проблема в конкретной базе; нет — в правах или диске.
- 💽 Проверьте состояние базы:
DBCC CHECKDB('buh_prod') WITH NO_INFOMSGS;. Ошибки целостности мешают и бэкапу. - 🔐 Убедитесь, что снимаете копию под учёткой с ролью
db_backupoperatorилиsysadmin. - 🆘 Если база не открывается вовсе (
Suspect,Recovery pending) — не экспериментируйте на боевой, снимите сначала копию файлов.mdf/.ldfпри остановленной службе SQL и работайте с ними.
Частые вопросы
Можно ли снять копию SQL-базы, не выгоняя пользователей?
BACKUP DATABASE работает на «живой» базе — пользователи продолжают вводить документы. Копия снимется на согласованное состояние на момент старта команды.Чем открыть или посмотреть файл .bak?
RESTORE) в базу через SSMS или скриптом, а затем открыть в 1С.Файловую базу 1С (не SQL) тоже можно бэкапить так?
1Cv8.1CD при закрытой базе либо делают выгрузку в .dt. Команды BACKUP DATABASE только для серверных баз на MS SQL.Как часто делать копию боевой базы?
Сколько занимает копия по объёму?
.mdf. Со сжатием (COMPRESSION) база 1С ужимается в 4–8 раз: копия базы на 20 ГБ займёт ориентировочно 3–5 ГБ.Копия развернулась, но 1С её не видит. Почему?
RESTORE базу нужно вручную добавить в окне запуска 1С через «Добавление существующей» и указать SQL-сервер и имя базы.