К статье
Практический материал

Администрирование · 12 мин

Как сохранить базу 1С SQL: резервное копирование и восстановление

Практическая инструкция по резервному копированию базы 1С на SQL Server: настройка через SSMS, скрипты T-SQL, расписание, проверка восстановления и типичные ошибки.

База 1С, развёрнутая на SQL Server, хранится не в одном файле, а в наборе файлов данных и журнала транзакций, которыми управляет СУБД. Поэтому «сохранить базу» означает сделать резервную копию средствами самого SQL Server — через графический интерфейс Management Studio, скриптом T-SQL или по расписанию. Простое копирование файлов .mdf и .ldf работающего сервера не подходит: файлы заблокированы, а их содержимое в любой момент может быть несогласованным.

Существует и альтернативный путь — выгрузка базы в файл .dt через конфигуратор 1С. Он создаёт независимый от СУБД архив, который можно загрузить в другую базу (в том числе файловую). Но выгрузка .dt медленнее, требует монопольного доступа и не заменяет полноценный бэкап SQL: она сохраняет только данные 1С, а не весь контекст сервера. На практике оба способа дополняют друг друга.

Ниже разобраны оба подхода, настройка автоматического копирования по расписанию, проверка восстановления и ограничения, о которых важно знать до начала работы.

Как устроено хранение базы 1С на SQL Server

При создании информационной базы в клиент-серверном режиме 1С формирует на SQL Server базу данных с таблицами, индексами и служебными объектами. Физически это минимум два файла: основной файл данных (.mdf) и журнал транзакций (.ldf). Журнал фиксирует все изменения и позволяет восстановить базу на конкретный момент времени при соответствующей модели восстановления.

Ключевой параметр — модель восстановления (recovery model). В простой (Simple) модели журнал автоматически усекается, и восстановить базу можно только на момент последнего бэкапа. В полной (Full) модели журнал растёт до тех пор, пока не выполнено резервное копирование журнала, зато появляется возможность восстановления на произвольную точку во времени. Для рабочих баз 1С с важными данными обычно выбирают полную модель с регулярными бэкапами журнала; для тестовых баз достаточно простой.

Резервное копирование через SQL Server Management Studio

Самый наглядный способ сделать разовую копию — графический интерфейс SSMS. Подключитесь к серверу под учётной записью с правами на резервное копирование (роль sysadmin или db_backupoperator в конкретной базе), раскройте список баз, щёлкните правой кнопкой по нужной базе и выберите «Задачи» → «Создать резервную копию» (Tasks → Back Up).

В окне настройки укажите тип копии «Полная» (Full), проверьте имя базы и задайте путь к файлу .bak. Файл лучше сохранять на отдельный диск или сетевой ресурс — копия на том же диске, что и сама база, не защищает от отказа носителя. На вкладке параметров можно включить проверку копии после завершения (Verify backup) и сжатие, если оно не включено по умолчанию на сервере.

После нажатия «ОК» дождитесь сообщения об успешном завершении. Сообщение об ошибке на этом этапе игнорировать нельзя: чаще всего причины — нехватка места на целевом диске или отсутствие прав у учётной записи службы SQL Server на каталог назначения.

Копирование скриптом T-SQL

Для регулярных операций удобнее скрипт. Простейшая команда полного бэкапа выглядит так:

BACKUP DATABASE [MyBase1C]

TO DISK = N'D:\Backups\MyBase1C_full.bak'

WITH COMPRESSION, CHECKSUM, INIT;

Параметр COMPRESSION уменьшает размер файла и ускоряет операцию, CHECKSUM включает проверку контрольных сумм страниц при чтении, INIT перезаписывает файл. Если нужен журнал версий, вместо INIT используйте добавление копий в один файл с указанием имени набора, но на практике проще формировать имя файла с датой.

Для баз в полной модели восстановления дополнительно выполняется копирование журнала транзакций:

BACKUP LOG [MyBase1C]

TO DISK = N'D:\Backups\MyBase1C_log.trn'

WITH COMPRESSION;

Копии журнала делают чаще полного бэкапа (например, каждые 15–60 минут) — именно они определяют, насколько близко к моменту сбоя удастся восстановить данные.

sql
BACKUP DATABASE [MyBase1C] TO DISK = N'D:\Backups\MyBase1C_full.bak' WITH COMPRESSION, CHECKSUM, INIT;

Настройка автоматического копирования по расписанию

Разовый бэкап не решает задачу защиты данных — копирование должно выполняться регулярно и без участия человека. В редакциях SQL Server Standard и выше для этого есть агент SQL Server и планы обслуживания (Maintenance Plans). В мастере планов обслуживания создаётся задача резервного копирования, выбираются базы, тип копии, расписание и срок хранения файлов с автоочисткой старых копий.

Если агент недоступен (редакция Express), скрипт T-SQL запускают через планировщик заданий Windows с помощью утилиты sqlcmd:

sqlcmd -S SERVER\INSTANCE -Q "BACKUP DATABASE [MyBase1C] TO DISK=N'D:\Backups\MyBase1C_%date%.bak' WITH COMPRESSION, INIT"

Типовой график для рабочей базы: полная копия ежедневно в нерабочее время, разностные копии (DIFFERENTIAL) в течение дня при большом объёме изменений, копии журнала — каждые 15–60 минут для баз в полной модели. Глубина хранения зависит от свободного места и требований к архиву, но минимум несколько последних полных копий держать стоит.

Настройка автоматического бэкапа
  1. 1
    Выберите модель восстановления базы (Full для рабочих баз, Simple для тестовых)
  2. 2
    Создайте скрипт BACKUP DATABASE с именем файла, включающим дату
  3. 3
    Настройте задание в агенте SQL Server или планировщике Windows
  4. 4
    Добавьте копирование журнала транзакций для модели Full
  5. 5
    Настройте удаление устаревших файлов и копирование на внешнее хранилище
  6. 6
    Проверьте выполнение задания и наличие файлов на следующий день

Выгрузка в .dt через конфигуратор как дополнительная мера

Выгрузка информационной базы выполняется в конфигураторе: меню «Администрирование» → «Выгрузить информационную базу». Результат — один файл с расширением .dt, содержащий данные и конфигурацию. Этот файл не привязан к SQL Server и загружается в любую базу с совместимой версией платформы, включая файловый вариант.

У способа есть жёсткие ограничения. Выгрузка требует монопольного режима — все пользователи должны выйти из базы. На больших базах процесс занимает заметное время и создаёт нагрузку на сервер. Кроме того, в .dt не попадают некоторые внешние данные (например, файлы, хранящиеся в томах вне базы, если используется такой режим).

Практическая роль .dt — страховка перед обновлением конфигурации, перенос базы между серверами и передача копии разработчику. Перед обновлением конфигурации имеет смысл сделать и бэкап SQL, и выгрузку .dt: первый быстро откатывает базу целиком, вторая помогает, если проблема затронула структуру метаданных.

Сравнение способов сохранения

Бэкап средствами SQL Server

Быстрый, не требует выхода пользователей, восстановление на точку времени. Ограничение: восстанавливается только на SQL Server совместимой версии.

Выгрузка .dt через конфигуратор

Переносимость между СУБД и файловым режимом, удобна перед обновлением. Ограничение: монопольный доступ, медленно на больших базах.

Копия виртуальной машины или снапшот

Захватывает весь сервер целиком. Ограничение: без согласования с СУБД снапшот может содержать несогласованные данные, не заменяет бэкап базы.

Проверка копий и восстановление

Бэкап, который ни разу не восстанавливали, нельзя считать надёжным. Минимальная проверка без восстановления — команда RESTORE VERIFYONLY, которая читает файл и контролирует его целостность:

RESTORE VERIFYONLY FROM DISK = N'D:\Backups\MyBase1C_full.bak';

Полноценная проверка — восстановление копии на тестовый сервер или в базу с другим именем. После восстановления запустите 1С, укажите новую базу в свойствах информационной базы и убедитесь, что конфигуратор и клиент открываются, а данные на ожидаемую дату присутствуют. Такая репетиция также показывает, сколько времени занимает реальное восстановление — это важно для оценки допустимого простоя.

При восстановлении рабочей базы после сбоя сначала, если сервер ещё жив, делается копия «хвоста» журнала (tail-log backup), затем последовательно восстанавливаются последняя полная копия, последняя разностная (если есть) и все копии журнала по порядку. Вмешательство в рабочую базу без отдельной копии её текущего состояния недопустимо.

Контрольные точки

Как проверить результат

Файл .bak существует и имеет ожидаемый размер
Норма

Размер сопоставим с размером базы, дата файла свежая

Тревожный признак

Файл нулевого размера или дата не меняется от запуска к запуску

RESTORE VERIFYONLY
Норма

Сообщение об успешной проверке набора копий

Тревожный признак

Ошибки чтения или контрольных сумм

Тестовое восстановление
Норма

База открывается в 1С, данные актуальны

Тревожный признак

Ошибки при восстановлении или при входе в базу

Журнал задания агента
Норма

Задание завершается успешно по расписанию

Тревожный признак

Задание молча не отрабатывает или падает с ошибкой

Типичные ошибки и ограничения

Самая частая ошибка — хранение бэкапов на том же физическом диске, что и база. При отказе диска теряется и база, и копии. Вторая по распространённости проблема — переполнение диска журналом транзакций в полной модели восстановления, когда бэкапы журнала не настроены: журнал растёт до исчерпания места, и база останавливается.

Ещё одна группа ошибок связана с правами: служба SQL Server работает под своей учётной записью, и именно ей нужны права записи в каталог бэкапов и на сетевой ресурс. Для сетевых путей используйте UNC-имена (\\server\share), а не подключённые диски — буквы дисков не видны из контекста службы.

Наконец, не стоит полагаться на антивирусное копирование, снапшоты дисков или файловые архиваторы как на единственную защиту. Без согласования с SQL Server такие копии могут оказаться несогласованными. Допустимый вариант — решения с поддержкой VSS, явно заявляющие согласованное копирование SQL Server, но и их нужно проверять тестовым восстановлением.

Типичные ошибки
01
Хранение бэкапов на том же диске, что и база — при отказе носителя теряется всё
02
Полная модель восстановления без бэкапов журнала — журнал переполняет диск и останавливает базу
03
Отсутствие тестового восстановления — в критический момент выясняется, что копия повреждена
04
Бэкап на сетевую папку через букву диска — служба SQL Server её не видит, задание падает
05
Остановка службы SQL Server и копирование .mdf/.ldf как единственный способ — риск несогласованной копии и простой базы

Частые вопросы

Можно ли делать бэкап SQL-базы 1С, пока пользователи работают?

Да, резервное копирование SQL Server выполняется в онлайн-режиме и не блокирует работу. Копия будет согласованной на момент завершения операции. Учитывайте только нагрузку на дисковую подсистему — на больших базах бэкап лучше планировать на периоды низкой активности.

Чем бэкап SQL отличается от выгрузки .dt?

Бэкап SQL — это копия базы на уровне СУБД: быстрая, не требует монопольного доступа, позволяет восстановиться на точку времени, но привязана к SQL Server. Выгрузка .dt — платформенный архив 1С, переносимый между СУБД и файловым режимом, но требующий выхода всех пользователей и работающий медленнее.

Куда лучше сохранять резервные копии?

Минимум — на отдельный физический диск сервера, надёжнее — на сетевое хранилище или в другое помещение. Общий принцип: копия не должна погибнуть вместе с основной системой, поэтому желательно иметь хотя бы одну копию вне сервера, а лучше — вне площадки.

Как часто нужно делать резервные копии?

Частота определяется допустимой потерей данных. Типовая схема для рабочей базы: полная копия ежедневно, копии журнала транзакций каждые 15–60 минут в полной модели восстановления. Если потеря дня работы допустима, достаточно ежедневной полной копии в простой модели.

Журнал транзакций занял весь диск. Что делать?

Это признак полной модели восстановления без бэкапов журнала. Сделайте резервное копирование журнала — после него место внутри файла освободится, затем настройте регулярные копии журнала. Если восстановление на точку времени не нужно, переведите базу в простую модель и выполните сжатие файла журнала.

Можно ли восстановить бэкап на SQL Server другой версии?

На более новую версию — да, восстановление поддерживается с обновлением формата базы. На более старую версию — нет, обратного переноса бэкапа не существует; в этом случае используют выгрузку .dt или генерацию скриптов данных.

Итог

Что важно запомнить

Сохранение базы 1С на SQL Server делается средствами СУБД: полный бэкап по расписанию плюс копии журнала при полной модели восстановления. Копии хранятся вне диска с базой, а их работоспособность подтверждается тестовым восстановлением. Выгрузка .dt — дополнительная страховка перед обновлениями, а не замена бэкапа.