Почему пропадают пользователи и возникает ошибка «Тип неопределен» при монопольном обновлении 1С 8.3 на MS SQL Server 2005?

Системный администратор 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При реструктуризации информационных баз в платформе 1С:Предприятие 8.3 иногда возникает критический сбой: после добавления любого нового реквизита или объекта в конфигураторе и применения изменений список пользователей из конфигуратора полностью исчезает, а при попытке зайти в 1С:Предприятие система выдает ошибку вида «Тип неопределен» при инициализации параметров сеанса. Проанализируем причины этой проблемы и разберем по шагам варианты ее исправления.

Причины сбоя при обновлении базы

Рассматриваемое поведение системы обусловлено связкой нескольких технических факторов:

  1. Несовместимость платформы 1С 8.3 и устаревшей СУБД MS SQL Server 2005. В платформе 8.3 существенно изменен алгоритм реструктуризации системных таблиц (в частности, v8users, Params и Config). Старая версия SQL Server не в полной мере поддерживает ряд современных операций T-SQL и механизмов работы с типами данных, используемых платформой 8.3, что приводит к некорректному завершению процедур изменения физических таблиц.
  2. Повреждение служебных таблиц пользователей. Во время реструктуризации платформа 1С создает временные таблицы (например, v8usersNG) и копирует в них учетные записи. При сбое на стороне СУБД или MS SQL Server Native Client процедура переименования или перенос данных прерывается, в результате чего таблица v8users оказывается пустой или некорректно связывается с метаданными.
  3. Зависшие транзакции в таблице Config. Если процедура применения изменений прервалась, в системной таблице Config остаются так называемые «грязные» маркеры реструктуризации. Из-за этого при запуск сеанса платформа теряет связи между UUID типов данных, что приводит к ошибкам идентификации параметров сеанса и сообщению «Тип неопределен».

Варианты восстановления базы данных и решения проблемы

Рассмотрим последовательность действий, которые помогут восстановить работоспособность информационной базы и предотвратить повторение сбоя.

Способ 1. Очистка зависших маркеров реструктуризации и прямое восстановление пользователей в SQL

Если восстановить базу из резервной копии полностью невозможно, но есть актуальный бэкап, сделанный до проведения реструктуризации, разберем порядок восстановления системных таблиц на уровне MS SQL Server.

  1. Выполним очистку временной таблицы сохранения конфигурации ConfigSave и удаление маркеров незавершенного обновления из таблицы Config:
    
    DELETE FROM ConfigSave;
    DELETE FROM Config WHERE FileName IN ('commit', 'dbStruFinal', 'DynamicallyUpdated', 'dynamicCommit');
    
  2. Восстановим таблицу v8users и таблицу параметров Params из копии базы данных. Для этого выполним следующий скрипт в MS SQL Server Management Studio (предварительно заменив имя рабочей базы и копии):
    
    DELETE FROM [РабочаяБаза].[dbo].[v8users];
    INSERT INTO [РабочаяБаза].[dbo].[v8users] SELECT * FROM [КопияБазы].[dbo].[v8users];
    
    DELETE FROM [РабочаяБаза].[dbo].[Params];
    INSERT INTO [РабочаяБаза].[dbo].[Params] SELECT * FROM [КопияБазы].[dbo].[Params];
    
  3. После выполнения запросов очистим локальный кэш платформы 1С на клиентских компьютерах и сервере приложений.

Способ 2. Выгрузка и загрузка через файл DT

Разберем классический способ устранения рассинхронизации структур метаданных 1С и SQL посредством полной выгрузки и загрузки информационного дампа.

  1. Откроем Конфигуратор монопольно и выполним выгрузку информационной базы в файл с расширением .dt (пункт меню Администрирование > Выгрузить информационную базу...).
  2. Создадим на MS SQL Server новую чистую базу данных с корректными сопоставлениями (Collation) и подключим её в консоли кластера 1С.
  3. Загрузим сохраненный файл .dt в вновь созданную базу. В процессе загрузки платформа заново сформирует физическую структуру всех системных таблиц, включая v8users, Params и Config.

Способ 3. Проведение реструктуризации через локальную или временную СУБД

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

  1. Для проведения доработок и добавления реквизитов выгрузим базу или применим изменения на промежуточной базе, поднятой на более свежей версии SQL Server (MS SQL Server 2012 / 2016 / 2019) или PostgreSQL, поддерживаемой платформой 8.3.
  2. После успешного применения изменений конфигурации базы данных выполним финальное обновление или перенос данных в продуктивный контур.
  3. Основным долгосрочным решением данной проблемы является обновление версии СУБД MS SQL Server 2005 до актуальной поддерживаемой версии (MS SQL Server 2012 или новее), а также обновление компонента MS SQL Server Native Client на сервере 1С:Предприятие.

Рекомендации по профилактике ошибок при обновлении

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

  1. Перед каждым монопольным обновлением или реструктуризацией обязательно создаем резервную копию средствами СУБД (файлы .bak).
  2. Перед внесением изменений в структуру метаданных запускаем процедуру Тестирование и исправление (ТИИ) со стандартными настройками проверки логической и ссылочной целостности.
  3. Не допускаем применения динамического обновления («на лету») при изменении структуры таблиц и состава реквизитов объектов.
← На главную