Как полностью очистить конфигурацию 1С на сервере MS SQL

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Каждый администратор баз данных и разработчик 1С рано или поздно сталкивается с ситуацией, когда тестовую или рабочую базу данных на сервере MS SQL Server необходимо «обнулить». Казалось бы, самый простой и очевидный путь — открыть Конфигуратор и загрузить чистый файл конфигурации (.cf) поверх существующей базы данных. Однако на практике этот метод часто преподносит неприятные сюрпризы.

После такой «очистки» при последующих операциях сравнения, объединения или обновления конфигураций могут начать всплывать странные фантомные ошибки структуры, нарушаться связи метаданных или оставаться старые данные. Возникает стойкое ощущение, что в недрах СУБД сохраняются остатки старой конфигурации. В этой статье мы подробно разберем, почему так происходит, и рассмотрим надежные способы полной очистки базы данных 1С на SQL-сервере.

Почему при загрузке файла конфигурации (.cf) «что-то остается»?

Выясним причину, по которой обычная загрузка файла .cf не приводит к идеальной чистоте базы данных. На уровне СУБД структура метаданных 1С описывается не только физическими таблицами сущностей (справочников, документов), но и специальными системными таблицами платформы. К ним относятся:

Когда мы загружаем файл конфигурации .cf поверх существующей структуры, платформа 1С пытается выполнить сопоставление и реструктуризацию данных. Если в процессе прошлых обновлений (особенно динамических обновлений, известных как «демонические») происходили сбои, в таблицах Config и DBSchema могут оставаться некорректные или «зависшие» записи. Платформа считает структуру частично нарушенной и не всегда физически удаляет абсолютно все старые таблицы СУБД. Также могут оставаться невычищенными служебные таблицы механизма истории данных (например, таблицы с префиксом _DataHistory).

Дополнительным источником проблем выступает локальный кэш конфигурации на стороне клиента. Платформа 1С агрессивно кэширует структуру метаданных на компьютере разработчика в папках %userprofile%\AppData\Local\1C и \Roaming\1C. Если не выполнить очистку этого кэша, вы продолжите видеть ошибки, которых физически в СУБД уже нет.


Способ 1. Полное пересоздание базы данных (Классический метод)

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

Разберем по шагам данный процесс:

  1. Откроем утилиту «Администрирование серверов 1С Предприятия» (консоль кластера).
  2. Найдем в списке нашу информационную базу, запишем все ее параметры подключения (имя сервера СУБД, имя базы данных на SQL, имя пользователя и пароль).
  3. Удалим информационную базу из кластера 1С. При удалении платформа спросит, нужно ли удалить базу данных на SQL-сервере. Выбираем вариант с удалением базы на СУБД.
  4. В консоли кластера создаем новую информационную базу с теми же параметрами.
  5. Запускаем пустую базу в режиме Конфигуратора и загружаем подготовленный чистый файл конфигурации .cf или резервную копию .dt.

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


Способ 2. Загрузка пустого файла выгрузки (.dt)

Рассмотрим альтернативный вариант, который можно выполнить без обращения к кластеру серверов 1С. Вместо загрузки файла конфигурации (.cf) мы будем использовать загрузку файла выгрузки информационной базы (.dt).

Метод основан на том, что при загрузке .dt платформа 1С полностью пересоздает структуру таблиц внутри базы СУБД. Она выполняет операцию очистки существующих данных и системных таблиц перед тем, как развернуть туда содержимое архива.

Разберем алгоритм действий:

  1. Создадим на локальном компьютере пустую файловую базу данных 1С.
  2. Откроем ее в режиме Конфигуратора и выполним выгрузку информационной базы, получив абсолютно чистый файл .dt.
  3. Откроем Конфигуратор нашей целевой базы данных на сервере MS SQL.
  4. Выберем пункт меню Администрирование — Восстановить информационную базу... и укажем созданный нами ранее пустой файл .dt.

Этот способ значительно надежнее простой загрузки .cf, так как платформа осуществляет более глубокую инициализацию таблиц СУБД. Тем не менее, в редких случаях сильно поврежденных баз данных на SQL могут оставаться неиспользуемые физические таблицы метаданных, которые не были описаны в файле выгрузки.


Способ 3. Скрипт-деструктор на стороне MS SQL (Быстрый лайфхак)

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

Суть метода заключается в следующем: когда мы запускаем Конфигуратор 1С, платформа проверяет базу данных SQL на наличие ключевых системных таблиц (таких как Config, DBSchema, Params). Если сама база данных на SQL-сервере существует, но в ней полностью отсутствуют какие-либо таблицы (база абсолютно пуста), платформа 1С считает эту базу новой. При запуске Конфигуратора она автоматически создаст чистую структуру системных таблиц с нуля, после чего предложит пользователю загрузить конфигурацию.

Чтобы быстро и гарантированно удалить абсолютно все таблицы из базы данных, не удаляя саму БД, мы можем выполнить специальный T-SQL скрипт в среде MS SQL Server Management Studio (SSMS).

Выполним следующие шаги:

  1. Запустим Microsoft SQL Server Management Studio (SSMS) и подключимся к нашему серверу баз данных.
  2. В дереве объектов выберем нашу базу данных 1С, которую необходимо очистить.
  3. Нажмем кнопку New Query (Новый запрос).
  4. Скопируем и выполним следующий скрипт очистки. Скрипт находит все пользовательские таблицы базы данных и поочередно удаляет их с помощью динамического SQL:

DECLARE @Sql NVARCHAR(MAX) = '';

-- Формируем команды DROP TABLE для всех таблиц в базе данных
SELECT @Sql = @Sql + 'DROP TABLE ' + QUOTENAME(s.name) + '.' + QUOTENAME(t.name) + ';' + CHAR(13)
FROM sys.tables t
JOIN sys.schemas s ON t.schema_id = s.schema_id;

-- Выводим сформированный скрипт для проверки (опционально)
-- PRINT @Sql;

-- Выполняем удаление всех таблиц
IF @Sql <> ''
BEGIN
    EXEC sp_executesql @Sql;
END;

После успешного выполнения данного скрипта база данных на сервере MS SQL останется зарегистрированной, но внутри нее не будет ни одной таблицы. Теперь выполним завершающие действия:

  1. Обязательно очистим кэш базы данных 1С на локальном компьютере, удалив соответствующие папки из каталогов Local\1C и Roaming\1C (или просто удалим базу из списка запуска 1С и добавим ее туда заново под тем же именем).
  2. Запустим базу данных в режиме Конфигуратора.
  3. Платформа обнаружит чистую СУБД и автоматически создаст в ней минимально необходимый набор системных таблиц.
  4. После открытия окна Конфигуратора загрузим чистый файл конфигурации .cf или чистый .dt.

Этот метод сочетает в себе максимальную скорость работы, гарантированную чистоту базы данных от старого «мусора» на уровне SQL и отсутствие необходимости возиться с настройками администрирования кластера 1С.

← На главную