Мазмұнға өту
Tez Base

Бэкап базы 1С есть, а файлов из томов в нём нет: как проверить заранее

· Жарияланды:

Бэкап и восстановление

Симптом выглядит так. Базу восстановили из резервной копии, пользователи работают, карточки присоединённых файлов открываются, а при попытке открыть сам скан или картинку 1С сообщает, что файла нет. Второй вариант того же симптома: отчёт целостности тома показывает строки со статусом “Отсутствуют данные в томе на диске”.

Обычная причина в том, что файлы живут в томах на диске, а копируется только база. Копия СУБД уносит запись о файле, каталог тома в неё не входит. Вторая половина проблемы тише: даже когда каталог тома копируется, пропажу файла, который никто не открывает, замечают через недели, и к этому моменту нужной копии уже нет. Ниже проверка по шагам и разбор реального случая, где эти две половины сошлись.

Где лежат файлы вашей базы

Первый вопрос, от которого зависит всё остальное. В конфигурациях на Библиотеке стандартных подсистем (БСП) у справочника “Версии файлов” и у каждого справочника присоединённых файлов есть три реквизита: “Тип хранения файла”, “Том” и “Путь к файлу”. Мы проверяли на Управлении торговлей (УТ) с БСП 3.1.11: справочников присоединённых файлов там 142, реквизиты есть у всех 142.

Как хранится файлЧто попадает в бэкап СУБДЧто копировать отдельно
В информационной базезапись и сам файлничего
В томах на дискетолько запись: ссылка на том и путькаталог каждого тома

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

Посмотреть, сколько записей у вас в томах, можно одним запросом. Он выполнен на той же УТ без ошибок:

ВЫБРАТЬ
	ВерсииФайлов.Том КАК Том,
	КОЛИЧЕСТВО(*) КАК Записей
ИЗ
	Справочник.ВерсииФайлов КАК ВерсииФайлов
ГДЕ
	ВерсииФайлов.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВТомахНаДиске)
СГРУППИРОВАТЬ ПО
	ВерсииФайлов.Том

Для присоединённых файлов тот же запрос пишется к их справочникам. Ноль строк означает, что тома не используются.

Два сценария, в которых файлы теряются

СценарийКогда проявитсяЧто видит пользовательЧем ловится
Базу копируют каждую ночь, каталог тома в задание не включилитолько после восстановления из копиизаписи на месте, файлов нетсверка на базе, поднятой из копии вместе с копией каталога
Том перенесли на другой диск или сетевую папку переподключили под другим именем, путь в карточке тома старыйв момент открытия уже загруженного файлакарточка открывается, файл нетотчёт целостности и счётчик на рабочей базе

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

Есть и третий вариант, более редкий: каталог хранения указан, приложение в него пишет, но физически каталог оказался не там, где его ждали и где его копируют. Разбор ниже как раз про него. Общий вывод из него для всех трёх: файлы надо считать там, где они обязаны лежать, а не по пути, который видит приложение.

Проверка по шагам

Шаг 1. Задание копирования. Откройте задание резервного копирования и найдите в нём каталог каждого тома. Не нашли, значит у вас копируется только половина данных. Каталог тома должен копироваться с той же частотой, что и база, и храниться столько же.

Шаг 2. Отчёт “Проверка целостности тома”. Он есть в БСП и открывается из списка томов хранения файлов и из карточки тома. Отчёт раскладывает файлы по статусам:

Статус в отчётеЧто это значит
Целостные данныезапись есть, файл на месте
Отсутствуют данные в томе на дискезапись есть, файла нет: ваш случай потери
Лишние файлы (есть на диске, но сведения о них отсутствуют)файл есть, записи о нём нет

Шаг 3. Ежедневный счётчик. Отчёт запускают, когда подозрение уже есть. Чтобы подозрение появилось вовремя, хватает двух чисел раз в сутки: записей по тому (запрос выше) и файлов в каталоге тома. Файлы считаются на сервере под учётной записью, у которой есть доступ к каталогу. Подкаталоги надо отбросить: том раскладывает файлы по вложенным папкам. Код ниже - схема подсчёта: на базе мы его не прогоняли, поэтому перед тем как ставить в регламентное задание, запустите его на копии и сверьте число с тем, что показывает проводник.

// КаталогТома - путь из карточки тома, вызов на сервере
Найденные = НайтиФайлы(КаталогТома, "*", Истина);
ФайловВТоме = 0;
СамыйСтарый = Неопределено;
Для Каждого Элемент Из Найденные Цикл
	Если Не Элемент.ЭтоФайл() Тогда
		Продолжить;
	КонецЕсли;
	ФайловВТоме = ФайловВТоме + 1;
	Изменен = Элемент.ПолучитьВремяИзменения();
	Если СамыйСтарый = Неопределено Или Изменен < СамыйСтарый Тогда
		СамыйСтарый = Изменен;
	КонецЕсли;
КонецЦикла;

Точного равенства записей и файлов не ждите: у счётчика другая работа. Разница не должна расти. Выросла за сутки, значит пора открывать отчёт целостности, пока в окне хранения ещё лежит копия каталога со вчерашними файлами.

Шаг 4. Дата самого старого файла. Самая дешёвая проверка из всех, она уже посчитана в коде выше. Если записи в томе идут с февраля, а старейший файл в каталоге датирован июлем, всё загруженное до июля потеряно, и никакой счётчик тут не нужен.

Шаг 5. Сверка на восстановленной копии. Единственный способ поймать первый сценарий. Поднимите базу из копии, рядом положите копию каталога тома и запустите на ней отчёт целостности. Если тестовая база у вас и так разворачивается из свежего бэкапа прода, отчёт достаточно гонять там. Для этого мы сделали обработку “Тестовая база из бэкапа рабочей” (карточка на Инфостарте): она собирает задание, которое каждую ночь поднимает тест из последней копии, и каждый такой прогон заодно доказывает, что копия восстанавливается. Про то, почему бэкап без проверки восстановления ничего не гарантирует и сколько такое восстановление длится на живом железе, есть отдельный разбор.

Разбор случая: копии были, но начались позже потери

Система в этой истории не на 1С, это корпоративная вики. Но устроена она как база 1С с томами: запись о вложении в базе, сам файл отдельно в хранилище на диске.

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

ДатаСобытие
4 февралязаведено хранилище на хосте, к контейнеру не подключено
февраль - июльзаписи о вложениях копятся, файлы исчезают при каждом пересоздании
8 июляпоследнее пересоздание, после него хранилище подключили
23 июляразбор жалобы на битые картинки
около 16 июляначало недельного окна копий виртуальной машины на дату разбора

Между концом потери и самой старой копией восемь дней. Все копии сделаны после того, как файлов не стало, и ни одного пропавшего файла в них нет.

Что показала сверка двух чисел, которые обязаны сходиться:

ПоказательБазаХранилище
Вложений4 016 записей662 файла
Объём552 МБ89 МБ
Средний размер137 КБ134 КБ

Записей без файлов 3 354, потерянный объём по средним около 463 МБ. Старейший уцелевший файл датирован 8 июля. Ровная граница по дате и есть главный признак: порча диска даёт дыры вразброс, а здесь исчезло всё, что было до определённого события.

Без картинок осталось 284 живых статьи. У живых неархивных документов 1 748 ключей вложений, и каждый искали в рабочем хранилище и в двух найденных каталогах, похожих на резервные копии (368 файлов в одном, 361 папка в другом). На месте оказалось 7, из обоих каталогов ноль совпадений, не найдено 1 741. Следов на хосте тоже не осталось: мёртвых контейнеров и остатков старых слоёв файловой системы с загрузками нет, второе хранилище от ранней попытки настройки пустое. Остался один путь: оригиналы у авторов, которые вставляли скриншоты прямо в редактор.

Для 1С отсюда два переноса. Картинка, вставленная прямо в редактор, часто существует в одном экземпляре, и этот экземпляр лежит в томе. А ежедневное сравнение числа записей с числом файлов, посчитанных на хосте, показало бы ноль файлов ещё в феврале.

Глубину хранения копий считают от срока обнаружения

Недельное окно копий в этой истории честно работало. Оно защищает от ошибки, которую заметили в течение недели. Эту заметили через две недели после конца потери и почти через полгода после начала.

Почему так поздно, понятно из устройства выдачи файла. Сервис отвечает, база целая, страницы открываются, запись о вложении на месте. Отказ приходит только на последнем шаге, при обращении к конкретному файлу. Проверка работоспособности его не видит, увидеть может только человек, открывший именно эту статью. У самой просматриваемой из пострадавших было 120 просмотров, и тревогу всё равно не подняли; почему, в разборе не записано.

С томами 1С то же самое: целая база создаёт полную иллюзию сохранности файлов. Поэтому вопрос к окну хранения звучит так: через сколько дней вы заметите пропажу файла, который никто не открывает? Если ответ длиннее окна, копии каталога тома у вас в том же положении, что у вики. Счётчик из шага 3 сокращает этот срок до суток. Без него честный ответ на вопрос выше - “когда кто-нибудь пожалуется”.

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

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

При переносе тома 1С на другой диск или в другую папку правило то же. Код ответа “успешно” и совпавшее число файлов ещё не доказывают, что файл откроется. Откройте несколько штук из разных лет, а потом прогоните отчёт целостности.

Держать файлы в базе или в томах

Тома разгружают базу и её бэкап, и ради этого их обычно и включают: что даёт вынос вложений по сравнению со сверткой и обрезкой, сведено в сравнении методов уменьшения базы. Цена у выноса одна: вторая система хранения, которую надо копировать отдельно и сверять с первой. Понять, сколько места в базе вообще занимают файлы и стоит ли их выносить, помогает карта объёмов базы.

Если тома у вас уже есть, начните с двух вопросов. Входит ли каталог каждого тома в то же задание копирования, что и база? И когда отчёт проверки целостности тома запускали в последний раз? Если на оба ответа нет, это настраивается в рамках обслуживания базы 1С.

Мұны сіздің орныңызға жөндей аламын

Регламенттік қызмет көрсетуді база тұрақты жұмыс істейтіндей, бэкаптар кепілді түрде қалпына келетіндей және дискілер кенет таусылмайтындай баптаймыз.

Құны
450 000 ₸-денбір реттік баптау; сүйемелдеу - айына 150 000 ₸-ден; салықтарсыз

Жазуға ерте ме? Өзіңіз өлшеп көріңіз

Тестовая база отстала от рабочей на полгода

Өңдеуді ашу

INFOSTART TECH EVENT 2026: конференция для 1с-специалистов. если собираетесь, регистрируйтесь по нашей ссылке. Регистрация →

Мұны да оқыңыз

Нарушение прав доступа в 1С: как узнать, какого права не хватило, и какую группу доступа выдать

Пользователь видит одну строку "Нарушение прав доступа!", а объект и имя права уже лежат в журнале регистрации. Разбор по шагам: как прочитать событие, как по праву найти роли, профили и самую узкую группу доступа, почему после выдачи права приходит новый отказ и в каких случаях выдавать права бесполезно.

Перенос базы 1С с PostgreSQL 18 на 17: восстановление по сети клиентом старшей версии

pg_restore версии 17 архив версии 18 не читает, а обновлять приёмник нельзя или некогда. Рабочий путь: запустить pg_restore 18 на источнике и направить его по сети в сервер 17. Методика целиком: какие пути тупиковые и почему, настройка доступа на приёмнике, выгрузка и загрузка в четыре потока, SQL-сверка таблиц и индексов, почему база после переноса меньше и как считать окно работ по одной таблице. С замерами на двух базах 1С.

Уникальный индекс в PostgreSQL пропускает дубли с NULL: найти, посчитать, починить

Методика для служебных таблиц рядом с базой 1С: один запрос к каталогу PostgreSQL находит все уникальные ключи с необязательными колонками, второй считает, какая доля строк идёт мимо защиты. Дальше ремонт по версиям: NULLS NOT DISTINCT с 15-й, частичные индексы до неё, и проверка повтором в транзакции с откатом. Все запросы прогнаны на PostgreSQL 17.