Что такое SchemaStorage и как исправить ошибку 'relation "schemastorage" does not exist' при выгрузке базы 1С в DT?

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

При работе с 1С:Предприятием 8.3, особенно после обновлений платформы, пользователи могут столкнуться с ошибкой, препятствующей выгрузке информационной базы в файл формата DT. Эта ошибка проявляется как relation "schemastorage" does not exist (для PostgreSQL) или Invalid object name 'SchemaStorage' (для Microsoft SQL Server). В данном материале мы рассмотрим, что представляет собой таблица SchemaStorage, почему возникает эта ошибка и какие шаги необходимо предпринять для ее устранения.

Что такое SchemaStorage?

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

Когда платформа 1С пытается выполнить операцию (в данном случае — выгрузку базы в DT) и обращается к таблице SchemaStorage, а СУБД сообщает, что такая таблица не найдена, это указывает на рассинхронизацию. То есть, платформа ожидает увидеть эту таблицу с определенной структурой, но по каким-то причинам она отсутствует или ее структура повреждена в физической базе данных.

Причины возникновения ошибки

Давайте проанализируем основные причины, по которым возникает ошибка relation "schemastorage" does not exist или Invalid object name 'SchemaStorage':

  1. Несоответствие структуры базы данных: Наиболее распространенная причина — это расхождения между метаданными конфигурации 1С и фактической структурой таблиц в СУБД. Такое несоответствие может возникнуть, если изменения в конфигурации или обновления платформы не были полностью или корректно применены к структуре базы данных. Платформа ожидает наличия таблицы SchemaStorage, но СУБД ее не находит.
  2. Ошибки платформы (баги): В некоторых версиях платформы 1С:Предприятие (например, 8.3.11.2924, как упоминается в сообщениях на форуме) эта ошибка была известным багом. Она могла проявляться сразу после обновления платформы, даже если до этого никаких проблем не было. Разработчики обычно исправляют такие ошибки в последующих релизах.
  3. Проблемы с СУБД: Хотя и реже в данном контексте 1С, общие причины для ошибки "relation does not exist" в PostgreSQL могут включать опечатки в имени таблицы, отсутствие квалификатора схемы, проблемы с чувствительностью к регистру имен таблиц, нахождение таблицы в другой схеме или ее отсутствие в пути поиска, а также ее удаление или переименование. Однако в случае с 1С чаще всего виновником является именно несогласованность между платформой и СУБД.

Основное решение: Тестирование и исправление (ТИИ) с реструктуризацией

Наиболее эффективным и часто помогающим решением данной проблемы является выполнение Тестирования и исправления (ТИИ) информационной базы с обязательной опцией "Реструктуризация таблиц информационной базы".

Что такое ТИИ и как оно помогает?

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

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

Как выполнить ТИИ с реструктуризацией:

  1. Обязательно сделайте полную резервную копию базы данных! Это критически важный шаг, так как реструктуризация — это серьезная операция, которая может привести к потере данных в случае непредвиденных сбоев или ошибок.
  2. Запустите 1С:Предприятие в режиме Конфигуратор.
  3. Перейдите в меню Администрирование.
  4. Выберите пункт Тестирование и исправление...
  5. В открывшемся окне "Тестирование и исправление информационной базы" установите следующие флаги:
    • Проверка логической целостности информационной базы
    • Реструктуризация таблиц информационной базы

    Остальные флаги можно установить по вашему усмотрению или оставить по умолчанию, но для решения нашей проблемы ключевыми являются именно эти два.

  6. Нажмите кнопку Выполнить.

Важные моменты и особенности ТИИ с реструктуризацией:

  1. Длительность процесса: Процесс реструктуризации может быть очень долгим, особенно для больших баз данных. На продолжительность влияют размер базы, производительность СУБД и сервера 1С. Планируйте выполнение этой операции на нерабочее время.
  2. Потребление дискового пространства: При реструктуризации 1С создает временные копии таблиц, что требует значительного объема свободного места на диске сервера, где расположена СУБД. Некоторые пользователи сталкивались с тем, что после начала реструктуризации все свободное место на сервере исчезало.
    • Если вы используете MS SQL Server, проверьте размер файла tempdb.mdf, так как он может сильно увеличиваться во время операций реструктуризации. Убедитесь, что на диске достаточно свободного места для временных файлов.
  3. Применение к каждой базе: Если у вас несколько информационных баз, и проблема проявляется в них всех, реструктуризацию необходимо провести для каждой базы по отдельности.
  4. Ускоренная реструктуризация: Начиная с платформы 8.3.11, был внедрен новый, более быстрый механизм реструктуризации для СУБД MS SQL и PostgreSQL. Он позволяет выполнять операции на уровне СУБД, что значительно ускоряет процесс. Для использования этого механизма может потребоваться установка Java 8 на сервере 1С.

Альтернативное решение 1: Косвенная реструктуризация через изменение конфигурации

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

  1. Запустите 1С:Предприятие в режиме Конфигуратор.
  2. Внесите любое, даже минимальное, изменение в конфигурацию. Например, добавьте новую константу (не важно, с каким типом и названием).
  3. Сохраните конфигурацию (через меню Конфигурация -> Сохранить конфигурацию базы данных или нажатием F7). При этом 1С предложит обновить конфигурацию базы данных – согласитесь. Это действие может вызвать небольшую реструктуризацию.
  4. Удалите добавленную константу.
  5. Снова сохраните конфигурацию и обновите конфигурацию базы данных (F7).

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

Альтернативное решение 2: Использование старой версии платформы для выгрузки

Если проблема возникла после обновления платформы до новой версии (например, с 8.3.10 на 8.3.11), и ТИИ не помогло или вы не имеете возможности его выполнить, можно попробовать следующий подход:

  1. Сделайте полную резервную копию текущей базы данных.
  2. Установите на ваш компьютер или сервер более старую, но рабочую версию платформы 1С:Предприятие (например, 8.3.10.2615, если проблема проявилась на 8.3.11.2924).
  3. Запустите конфигуратор с использованием старой версии платформы и откройте проблемную информационную базу.
  4. Попробуйте выгрузить базу данных в формат DT через старую платформу (меню Конфигурация -> Сохранить конфигурацию в файл... или Администрирование -> Выгрузить информационную базу...).
  5. Если выгрузка прошла успешно, вы можете создать новую информационную базу, используя актуальную версию платформы, и загрузить в нее полученный DT-файл.

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

Дополнительные наблюдения и советы

  1. Имя файла выгрузки DT: Один из пользователей заметил, что ошибка могла возникать при попытке выгрузки бэкапа с длинным именем файла (например, 1Cv8_БЖ_2018.02.05.dt), в то время как выгрузка с простым именем (например, 1Cv8.dt) завершалась успешно. Однако, другие пользователи подтвердили, что этот совет не является универсальным решением и реструктуризация все равно требовалась. Тем не менее, как временное или дополнительное действие, можно попробовать сохранить файл DT с максимально простым именем.
  2. Проблемы с Windows 10: Некоторые пользователи отмечали, что подобные ошибки, требующие реструктуризации, могли возникать при переносе баз с Windows 7 на Windows 10. Хотя это наблюдение не имеет прямого отношения к SchemaStorage, оно указывает на возможные системные нюансы, которые могут влиять на работу 1С.

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

← На главную