Может ли свертка базы удалить внешние файлы из томов хранения?

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

Свертка информационной базы — это сложная процедура, направленная на сокращение объема данных и увеличение производительности системы. Однако при использовании механизма хранения файлов во внешних томах (на диске) возникает серьезный риск безвозвратной потери данных. Разберем детально, как взаимосвязаны объекты базы данных и физические файлы на сервере, и почему стандартная свертка может привести к очистке папок с документами.

Механизм связи базы данных и внешних томов

Для начала проанализируем, как 1С работает с прикрепленными файлами. В современных конфигурациях на базе Библиотеки стандартных подсистем (БСП) файлы могут храниться либо непосредственно в информационной базе (в виде двоичных данных), либо в томах на диске. Рассмотрим второй вариант, так как он наиболее уязвим. Когда мы прикрепляем скан-образ к документу, в базе создается запись в справочнике ПрисоединенныеФайлы (например, РеализацияТоваровУслугПрисоединенныеФайлы). Эта запись содержит ссылку на путь к физическому файлу в сетевой папке или локальном каталоге.

Важно понимать: сама свертка базы (создание документов ввода остатков и пометка на удаление старых документов) файлы не удаляет. Проблемы начинаются на следующих этапах:

  1. Удаление помеченных объектов: Когда мы окончательно удаляем старые документы, система удаляет и связанные с ними элементы справочников присоединенных файлов.
  2. Работа регламентных заданий: В системе существует регламентное задание ОчисткаНенужныхФайлов. Именно оно является тем механизмом, который физически стирает файлы с диска, если на них больше нет ссылок в базе данных.

Почему файлы исчезают даже в рабочей базе при работе в копии?

Выясним причину самой опасной ситуации: когда системный администратор делает копию базы для тестов или свертки, а файлы исчезают из основной рабочей среды. Это происходит из-за того, что копия базы сохраняет настройки подключения к тем же самым томам хранения. Рассмотрим цепочку событий:

  1. Создается копия базы. При первом запуске пользователь нажимает «Я переместил базу» (вместо «Это копия»), что может привести к активации регламентных заданий.
  2. В копии запускается свертка. Документы за прошлые годы помечаются на удаление и удаляются.
  3. Вместе с документами из справочников копии базы исчезают ссылки на файлы.
  4. Запускается регламентное задание по очистке. Оно видит: «В моей базе ссылок на файл Invoice_123.pdf больше нет, значит, он мусорный».
  5. Задание удаляет файл Invoice_123.pdf из сетевой папки.
  6. В основной базе пользователь пытается открыть тот же файл и получает ошибку: «Файл не найден».

Как предотвратить удаление файлов при свертке

Проанализируем шаги, которые необходимо предпринять для безопасного проведения свертки. Мы должны полностью изолировать среду свертки от физических данных.

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


// Пример программной установки блокировки регламентных заданий
Блокировка = НовыеДанныеБлокировкиСеансов();
Блокировка.УстановитьБлокировкуРегламентныхЗаданий(Истина);
УстановитьБлокировкуСеансов(Блокировка);

Шаг 2: Изменение путей к томам в копии. Сразу после создания копии базы, до запуска свертки и удаления помеченных объектов, необходимо зайти в настройки работы с файлами и изменить пути к томам. Мы можем либо очистить пути, либо указать пустые временные папки. Рассмотрим программный способ проверки путей:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	ТомаХраненияФайлов.Ссылка КАК Том,
    |	ТомаХраненияФайлов.ПолныйПутьWindows,
    |	ТомаХраненияФайлов.ПолныйПутьLinux
    |ИЗ
    |	Справочник.ТомаХраненияФайлов КАК ТомаХраненияФайлов";

Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
    // Здесь необходимо изменить пути на безопасные
    ОбъектТома = Результат.Том.ПолучитьОбъект();
    ОбъектТома.ПолныйПутьWindows = "C:\TEMP\DummyFiles\";
    ОбъектТома.Записать();
КонецЦикла;

Особенности работы регламентного задания «Очистка ненужных файлов»

Разберем подробнее, как работает это задание в типовых конфигурациях. Оно анализирует записи в регистрах сведений и справочниках файлов. Если файл помечен как «неиспользуемый», система может удалить его не сразу, а по истечении срока хранения, указанного в настройках.

Обратите внимание: В некоторых версиях БСП наблюдались ошибки, когда задание ОчисткаНенужныхФайлов могло ошибочно идентифицировать файлы как лишние. Поэтому рекомендуется устанавливать настройку «Хранить файлы в томах» с осторожностью и всегда иметь свежий архив самих томов (файловой системы), а не только базы данных.

Рекомендации для системных администраторов и программистов

Чтобы избежать потери данных, придерживайтесь следующих правил совместной работы:

Выясним, что делать, если файлы уже удалены

Если вы обнаружили пропажу файлов после свертки, алгоритм действий должен быть следующим:

  1. Немедленно остановите регламентное задание ОчисткаНенужныхФайлов во всех базах-копиях.
  2. Восстановите каталог томов из бэкапа. Если бэкапа томов нет, попробуйте воспользоваться средствами восстановления удаленных файлов (Shadow Copies/VSS в Windows или снимки файловой системы в Linux/Storage).
  3. Проверьте в базе данных наличие «битых» ссылок. Для этого можно использовать типовой отчет «Проверка целостности томов».

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

← На главную