При использовании механизма Хранить файлы в томах на диске многие администраторы сталкиваются с критической проблемой: если развернуть копию базы и оставить в ней те же настройки путей к файловым томам, что и в основной базе, любая операция удаления или изменения файла в копии затронет реальные данные продуктивной системы. Давайте разберем, почему это происходит и какими способами можно обезопасить себя от «случайного» удаления файлов.
Важно помнить, что при использовании Томов на диске база данных 1С хранит лишь метаданные и ссылки (путь к файлу). Сами файлы располагаются в файловой системе. Если настройки путей в копии и в «проде» идентичны, то обе базы работают с одним и тем же физическим пространством. Копия не «знает», что она копия, и честно выполняет команды пользователя или регламентных заданий по очистке или удалению файлов. Следовательно, это не баг, а особенность настройки архитектуры, требующая внимания со стороны администратора.
Самый надежный способ — ограничить доступ на уровне прав пользователей ОС, под которыми работают серверы 1С. Рассмотрите следующие шаги:
Мы можем внедрить проверку в конфигурацию, чтобы система автоматически определяла, является ли база тестовой. Это можно сделать в модуле управляемого приложения в процедуре ПриНачалеРаботыСистемы. Например, анализируя имя сервера или уникальный идентификатор базы:
// Пример проверки и блокировки
Если Не ЭтоПродуктивнаяБаза() Тогда
// Можно принудительно переключить путь к томам на локальную папку
// или установить флаг, запрещающий запись в тома
Константы.РежимРаботыСФайлами.Установить(Перечисления.РежимыРаботыСФайлами.ТолькоЧтение);
Предупреждение("Внимание! Это тестовая база. Запись в тома файлов заблокирована во избежание повреждения данных.");
КонецЕсли;
Рассмотрим административный подход: создание выделенного тома для тестовых нужд. Разберем действия по шагам:
Настройка программы — Работа с файлами.Только чтение, если это позволяет функционал вашей конфигурации.Будьте крайне осторожны с регламентными заданиями, которые очищают помеченные на удаление файлы. В 1С есть механизм, когда при пометке объекта на удаление ПутьКФайлу может меняться на путь с добавлением суффикса _remove. Если в тестовой базе запустить процесс удаления, который физически стирает данные или переименовывает файлы, вы рискуете «уронить» доступ к документам в проде.
Проанализируйте код, отвечающий за удаление файлов. Часто можно найти использование конструкции, подобной этой:
// Фрагмент логики обработки удаления
ФайлИлиВерсияОбъект.ПутьКФайлу = ФайлИлиВерсияОбъеку.ПутьКФайлу + "_remove";
УдалитьФайлы(ПутьКФайлу);
Если вы не планируете использовать функционал удаления в копии, рекомендуем полностью отключать регламентные задания по очистке файлов в тестовых базах.
Чтобы избежать проблем с хранилищем файлов при копировании базы, всегда придерживайтесь этих правил:
Помните, что использование томов на диске перекладывает ответственность за целостность данных с SQL-сервера на администратора файловой системы. Будьте внимательны при настройке прав доступа!