Каждый администратор баз данных и разработчик 1С рано или поздно сталкивается с ситуацией, когда тестовую или рабочую базу данных на сервере MS SQL Server необходимо «обнулить». Казалось бы, самый простой и очевидный путь — открыть Конфигуратор и загрузить чистый файл конфигурации (.cf) поверх существующей базы данных. Однако на практике этот метод часто преподносит неприятные сюрпризы.
После такой «очистки» при последующих операциях сравнения, объединения или обновления конфигураций могут начать всплывать странные фантомные ошибки структуры, нарушаться связи метаданных или оставаться старые данные. Возникает стойкое ощущение, что в недрах СУБД сохраняются остатки старой конфигурации. В этой статье мы подробно разберем, почему так происходит, и рассмотрим надежные способы полной очистки базы данных 1С на SQL-сервере.
Выясним причину, по которой обычная загрузка файла .cf не приводит к идеальной чистоте базы данных. На уровне СУБД структура метаданных 1С описывается не только физическими таблицами сущностей (справочников, документов), но и специальными системными таблицами платформы. К ним относятся:
Config — хранит основную конфигурацию базы данных.ConfigSave — хранит редактируемую (сохраняемую) конфигурацию.DBSchema — содержит описание схемы данных, соответствующей метаданным.Params — содержит служебные параметры базы, включая настройки обновлений и версии платформы.Когда мы загружаем файл конфигурации .cf поверх существующей структуры, платформа 1С пытается выполнить сопоставление и реструктуризацию данных. Если в процессе прошлых обновлений (особенно динамических обновлений, известных как «демонические») происходили сбои, в таблицах Config и DBSchema могут оставаться некорректные или «зависшие» записи. Платформа считает структуру частично нарушенной и не всегда физически удаляет абсолютно все старые таблицы СУБД. Также могут оставаться невычищенными служебные таблицы механизма истории данных (например, таблицы с префиксом _DataHistory).
Дополнительным источником проблем выступает локальный кэш конфигурации на стороне клиента. Платформа 1С агрессивно кэширует структуру метаданных на компьютере разработчика в папках %userprofile%\AppData\Local\1C и \Roaming\1C. Если не выполнить очистку этого кэша, вы продолжите видеть ошибки, которых физически в СУБД уже нет.
Проанализируем самый надежный, но при этом самый трудоемкий способ — полное удаление старой базы данных и создание новой с нуля. Этот вариант гарантирует стопроцентную чистоту, поскольку физически уничтожаются все файлы старой СУБД.
Разберем по шагам данный процесс:
.cf или резервную копию .dt.Главный минус этого способа: для его реализации требуются административные права доступа к кластеру серверов 1С. Очень часто у разработчиков или администраторов СУБД нет прямого доступа к консоли кластера, либо процесс перерегистрации базы завязан на сложные механизмы авторизации, что делает этот путь неудобным для быстрой работы.
Рассмотрим альтернативный вариант, который можно выполнить без обращения к кластеру серверов 1С. Вместо загрузки файла конфигурации (.cf) мы будем использовать загрузку файла выгрузки информационной базы (.dt).
Метод основан на том, что при загрузке .dt платформа 1С полностью пересоздает структуру таблиц внутри базы СУБД. Она выполняет операцию очистки существующих данных и системных таблиц перед тем, как развернуть туда содержимое архива.
Разберем алгоритм действий:
.dt..dt.Этот способ значительно надежнее простой загрузки .cf, так как платформа осуществляет более глубокую инициализацию таблиц СУБД. Тем не менее, в редких случаях сильно поврежденных баз данных на SQL могут оставаться неиспользуемые физические таблицы метаданных, которые не были описаны в файле выгрузки.
Рассмотрим самый элегантный и быстрый способ очистки базы данных, который доступен администраторам СУБД. Он позволяет получить абсолютно чистую базу данных на MS SQL Server без удаления самой базы в SQL, без обращения к кластеру 1С и без перенастройки параметров подключения.
Суть метода заключается в следующем: когда мы запускаем Конфигуратор 1С, платформа проверяет базу данных SQL на наличие ключевых системных таблиц (таких как Config, DBSchema, Params). Если сама база данных на SQL-сервере существует, но в ней полностью отсутствуют какие-либо таблицы (база абсолютно пуста), платформа 1С считает эту базу новой. При запуске Конфигуратора она автоматически создаст чистую структуру системных таблиц с нуля, после чего предложит пользователю загрузить конфигурацию.
Чтобы быстро и гарантированно удалить абсолютно все таблицы из базы данных, не удаляя саму БД, мы можем выполнить специальный T-SQL скрипт в среде MS SQL Server Management Studio (SSMS).
Выполним следующие шаги:
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 останется зарегистрированной, но внутри нее не будет ни одной таблицы. Теперь выполним завершающие действия:
Local\1C и Roaming\1C (или просто удалим базу из списка запуска 1С и добавим ее туда заново под тем же именем)..cf или чистый .dt.Этот метод сочетает в себе максимальную скорость работы, гарантированную чистоту базы данных от старого «мусора» на уровне SQL и отсутствие необходимости возиться с настройками администрирования кластера 1С.