Ошибка «Ошибка формата потока» в платформах «1С:Предприятие 8.3» — одна из наиболее критических проблем, с которыми сталкиваются администраторы и разработчики. При возникновении этого сбоя система блокирует запуск базы в режиме «Толстый клиент» и делает невозможным вход в Конфигуратор. При этом запуск в режиме «Тонкий клиент» может сопровождаться предупреждением Конфигурация базы данных не соответствует сохраненной.
В этой статье мы подробно разберем причины возникновения данной катастрофы, проанализируем порядок восстановления базы данных под управлением MS SQL Server и рассмотрим профилактические меры для предотвращения повторения сбоя.
Выясним причину, почему возникает сбой структуры данных. В подавляющем большинстве случаев повреждение потока данных происходит из-за некорректно выполненного динамического обновления (так называемого «демонического» обновления) при активных пользовательских сеансах. В платформе 8.3 механизм некорректно обрабатывает структуру таблиц при параллельной записи изменения метаданных пользователями.
В результате аварийного завершения динамического обновления происходит рассинхронизация или физическое повреждение системных таблиц хранилища конфигурации в СУБД:
dbo.config — таблица основной конфигурации;dbo.configsave — таблица сохраняемой (динамической) конфигурации;dbo.params — таблица системных параметров базы данных.Дополнительным фактором могут выступать сбои сетевого взаимодействия (например, некорректная фильтрация сжатых пакетов антивирусными экранами) и повреждение серверного кэша кластера 1С.
Рассмотрим по шагам эффективный алгоритм восстановления доступа к Конфигуратору при наличии ранее сделанного бекапа SQL или резервной копии базы данных (даже двухдневной давности).
Перед выполнением любых SQL-запросов обязательно создайте резервную копию текущей сбойной базы в MS SQL Server Management Studio (SSMS).
Завершите все активные сеансы и остановите службу 1C:Enterprise 8.3 Server Daemon через оснастку служб Windows, чтобы снять блокировки с таблиц СУБД.
Если у вас есть исправный бекап информационной базы (сделанный до неудачного обновления), разверните его на том же сервере SQL под временным именем. Перенесите данные из таблиц dbo.config и dbo.configsave эталонной базы в поврежденную.
Выполните следующий скрипт в MS SQL Server Management Studio:
USE [Поврежденная_База];
GO
-- Очищаем поврежденные таблицы конфигурации
TRUNCATE TABLE dbo.config;
TRUNCATE TABLE dbo.configsave;
-- Переносим данные из заведомо исправной копии базы
INSERT INTO dbo.config SELECT * FROM [Исправная_Копия_Базы].dbo.config;
INSERT INTO dbo.configsave SELECT * FROM [Исправная_Копия_Базы].dbo.configsave;
GO
Перейдите в каталог данных службы сервера 1С (по умолчанию C:\Program Files\1cv8\srvinfo\reg_1541). Найдите папку с GUID соответствующей информационной базы и удалите из нее вложенные папки временных данных и кэшей (например, директорию v8cfg).
Запустите службу сервера 1С. Войдите в Конфигуратор базы данных с правами администратора. Перейдите в меню Конфигурация -> Обновить конфигурацию базы данных (нажмите клавишу F7) для полной синхронизации структуры метаданных.
Посмотрим на ситуацию, когда база открывается исключительно в режиме «Тонкий клиент», а доступ к SQL-серверу ограничен или исправного бекапа системных таблиц нет. Покольку прикладной код 1С продолжает работать, мы можем сохранить пользовательские данные:
Выгрузка и загрузка данных XML (или специализированные обработки переноса на базе БСП).Проанализируем важные ограничения и технические нюансы, о которых следует помнить при ликвидации ошибки:
chdbfl.exe предназначена исключительно для файлового формата баз данных (1Cv8.1CD). В режиме MS SQL Server она не применяется.dbo.config и dbo.params перед проведением любых регламентных работ по обновлению.