В процессе разработки и поддержки баз данных на платформе 1С:Предприятие специалисты регулярно сталкиваются с ситуацией: выполнено долгое и сложное сравнение/объединение конфигураций, изменения сохранены в Конфигураторе (через Ctrl+S или кнопку сохранения), но база данных еще не обновлена (клавиша F7 не нажималась). В этот момент разработчик понимает, что перед началом работ не был сделан бэкап. Возникает логичный вопрос: можно ли сделать резервную копию прямо сейчас, в этом промежуточном состоянии? Сохранятся ли внесенные изменения в бэкапе, и не повредит ли это саму базу данных? Рассмотрим подробно физику этого процесса, разберем поведение СУБД и выработаем оптимальный план действий.
Для того чтобы ответить на вопрос, что именно попадет в бэкап, нам необходимо детально разобраться в том, как устроена платформа 1С на уровне хранения метаданных. В любой информационной базе 1С:Предприятие параллельно сосуществуют три конфигурации:
Config.ConfigSave. Именно в этом состоянии сейчас находится база автора вопроса: основная конфигурация уже изменена и сохранена в ConfigSave, но конфигурация базы данных в Config все еще старая.DBSchema и других служебных объектах.Таким образом, когда вы сохранили изменения в Конфигураторе, но еще не нажали F7 (Обновить конфигурацию базы данных), вы изменили только таблицу ConfigSave. Физическая структура таблиц с данными пользователей (справочники, документы, регистры) в СУБД осталась абсолютно нетронутой.
Рассмотрим, как ведут себя различные механизмы резервного копирования, если запустить их в этом промежуточном состоянии:
Config и ConfigSave. При последующей загрузке этого файла на другом компьютере или сервере вы получите базу в точно таком же состоянии: кнопка F7 (синий бочонок с восклицательным знаком) будет активна, а при запуске Конфигуратора вы сможете продолжить работу с сохраненными изменениями.Config (старая рабочая структура) и ConfigSave (новые сохраненные изменения). Метод абсолютно безопасен и полностью сохраняет вашу работу.Важный вывод: Делать бэкап в этом состоянии можно и нужно. Он полностью сохранит результаты вашего долгого сравнения и объединения, но при этом сами пользовательские данные будут находиться в безопасности, так как реструктуризация таблиц еще не началась.
Если ваша информационная база имеет огромный объем (десятки или сотни гигабайт), создание полного бэкапа базы данных может занять часы. Если ваша цель — просто защитить результаты долгого сравнения/объединения конфигураций от потери, делать полный бэкап базы не обязательно. Проанализируем более эффективный сценарий разработки:
.cf. Этот файл содержит только метаданные (вашу доработанную конфигурацию из таблицы ConfigSave) и создается практически мгновенно, независимо от размера пользовательских данных в базе..cf.
- Нажать F7 для применения изменений.Этот простой прием избавляет разработчика от необходимости тратить время на повторное сравнение и объединение конфигураций, экономя огромное количество рабочего времени.
Если вы передумали обновлять базу данных и хотите вернуть Конфигуратор в исходное состояние (соответствующее работающей конфигурации пользователей), делать восстановление из бэкапа не требуется. Разберем, как выполнить откат штатными средствами системы:
ConfigSave и Config. Данные из таблицы ConfigSave (ваши не примененные изменения) будут полностью перезаписаны актуальными метаданными из таблицы Config..cf файл).При активном манипулировании конфигурациями (частые откаты изменений, накатывание файлов метаданных, восстановление промежуточных состояний из бэкапов) разработчики часто сталкиваются с нестабильным поведением платформы на рабочих станциях пользователей. Это связано с тем, что локальный кэш конфигурации (папки DBNameCache, SICache в каталоге AppData пользователя) может вовремя не обновиться.
Симптомами проблемы с кэшем являются ложные ошибки вида: "Конфигурация базы данных не соответствует сохраненной конфигурации" или некорректное отображение элементов интерфейса. Чтобы избежать подобных проблем, после завершения сложных восстановительных процедур настоятельно рекомендуется очистить кэш 1С у пользователей (самый простой способ — удалить базу из списка запуска и добавить ее заново с тем же путем).
Если после создания резервной копии вы запустили процесс обновления базы данных через F7, но процедура аварийно прервалась (например, произошло отключение электроэнергии, авария на сервере СУБД или завис процесс реструктуризации тяжелой таблицы), база данных может остаться в заблокированном состоянии. При попытке войти в систему будет возникать ошибка: "Обнаружена незавершенная операция сохранения конфигурации".
Для клиент-серверных баз данных под управлением СУБД (MS SQL, PostgreSQL) существует способ реанимировать базу данных без долгого процесса полного восстановления из бэкапа. Для этого выполним следующие действия:
ConfigSave. Для этого выполним запрос:
DELETE FROM ConfigSave;
Config, содержащие маркеры обновления в поле FileName:
DELETE FROM Config WHERE FileName IN ('commit', 'dbStruFinal', 'dynamicCommit', 'DynamicallyUpdated');
После выполнения этих манипуляций платформа посчитает, что процесс обновления конфигурации базы данных был отменен, незавершенная транзакция сбросится, и вы сможете запустить базу в обычном режиме для проведения диагностики.