Как обеспечить совместимость 1С:Предприятие 8.1 с SQL Server 2014/2016 на Windows Server 2016?

Системный администратор
← На главную

В данном руководстве мы рассмотрим распространенную проблему совместимости, с которой сталкиваются пользователи 1С:Предприятие 8.1 при попытке развернуть ее на более современных версиях операционных систем, таких как Windows Server 2016, и в связке с новыми версиями SQL Server, например, 2014 или 2016. Многие пользователи желают сохранить свою текущую платформу 8.1 и избежать обновления, а также не трогать конфигурацию базы данных.

Исходная проблема заключается в ошибке, возникающей при создании базы данных или конвертации файловой базы в SQL-версию, при этом система 1С:Предприятие 8.1 сообщает о несовместимости OLE DB провайдера или других системных компонентов.

Причины проблемы совместимости

Выясним, почему возникает такая ситуация. Платформа 1С:Предприятие 8.1 была актуальна в период, когда основными версиями MS SQL Server являлись 2005 и 2008. Соответственно, ее компоненты, в том числе и средства для взаимодействия с СУБД, были разработаны и протестированы именно под эти версии. При попытке использовать 1С 8.1 с SQL Server 2014, 2016 или новее, а также на современных операционных системах типа Windows Server 2016, мы сталкиваемся с отсутствием прямой официальной поддержки. Это приводит к конфликтам версий системных библиотек и OLE DB провайдеров.

Ключевой момент: Основная причина кроется в устаревших требованиях к OLE DB провайдеру базы данных, который ожидает 1С 8.1. Более новые версии SQL Server поставляются с обновленными OLE DB драйверами, которые могут быть несовместимы с тем, что "ожидает" старая платформа. Ошибки типа "Неподходящая версия OLE DB провайдера базы данных" прямо указывают на эту проблему.

Официальное и рекомендуемое решение: Обновление платформы 1С

Разберем, почему это наилучший и наиболее стабильный путь, хотя и не всегда желаемый для пользователей. Официально 1С:Предприятие 8.1 не поддерживает современные версии SQL Server и Windows Server. Единственный гарантированный способ обеспечить совместимость и стабильность — это обновить платформу 1С до более актуальной версии, например, 8.3.

Переход на 1С:Предприятие 8.3 предоставит официальную поддержку SQL Server 2014, 2016, 2017, 2019, 2022 и Windows Server 2016. Это решение обеспечит максимальную стабильность, безопасность и возможность получать обновления.

Практический совет: Если вы решитесь на обновление платформы до 8.3, но хотите минимизировать изменения в вашей конфигурации, вы можете использовать режим совместимости. В настройках информационной базы (в конфигураторе) мы устанавливаем режим совместимости с версией 8.1. Это позволит запускать старые конфигурации на новой платформе, используя функциональность, доступную в 8.1, но при этом платформа будет использовать современные системные компоненты для работы с SQL Server и ОС.

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

Изменение уровня совместимости базы данных SQL Server

Рассмотрим, как этот параметр может помочь в нашей ситуации. SQL Server предоставляет возможность устанавливать уровень совместимости для каждой базы данных. Это позволяет эмулировать поведение более старых версий SQL Server для конкретной базы данных, что может быть полезно для устаревших приложений, таких как 1С 8.1.

Разберем по шагам, как мы можем попробовать изменить уровень совместимости:

  1. Откройте SQL Server Management Studio (SSMS) и подключитесь к вашему экземпляру SQL Server.
  2. В обозревателе объектов разверните узел "Базы данных".
  3. Для вашей базы данных 1С (или той, которую вы пытаетесь создать) щелкните правой кнопкой мыши и выберите "Свойства".
  4. В окне "Свойства базы данных" перейдите на страницу "Параметры".
  5. В разделе "Уровень совместимости" мы увидим выпадающий список. Попробуйте установить более низкий уровень совместимости, например, SQL Server 2008 (100) или даже 2005 (90), если такие опции доступны. SQL Server 2022, например, поддерживает уровни совместимости вплоть до SQL Server 2008.

Важно учитывать: Изменение уровня совместимости базы данных позволяет приложению работать так, как если бы оно подключалось к более старой версии SQL Server, но это не влияет на все изменения на уровне самого сервера SQL Server. Некоторые функции, которые были полностью удалены из новых версий SQL Server, могут быть недоступны даже при использовании старого уровня совместимости. Тем не менее, это одна из возможных мер для сохранения старого поведения и может помочь обойти некоторые проблемы совместимости с OLE DB провайдером.

Использование более старых версий SQL Server

Альтернативный подход, который может решить проблему без обновления платформы 1С или глубоких модификаций системы, заключается в использовании более старой, но все еще работоспособной на Windows Server 2016 версии SQL Server.

Например, пользователь в обсуждении рассматривает установку SQL Server 2012. SQL Server 2012 (64-bit) может работать на Windows Server 2016, хотя это и не является официально поддерживаемой конфигурацией Microsoft. 1С:Предприятие 8.3, например, поддерживает SQL Server 2012. Для 1С 8.1 это может оказаться более совместимым вариантом, чем SQL Server 2014/2016, поскольку он ближе по времени выхода к платформе 8.1 и, вероятно, использует более подходящие OLE DB провайдеры.

Ограничения: Мы должны понимать, что SQL Server 2012 также является устаревшей версией, и его использование для новых внедрений на Windows Server 2016 не рекомендуется для производственных систем из-за отсутствия официальной поддержки и потенциальных рисков безопасности. Однако, в условиях сохранения 1С 8.1, это может быть временным или компромиссным решением, которое требует тщательного тестирования.

Неофициальное решение: Патчинг системных DLL

В случае, когда другие методы не помогают или нежелательны, мы можем рассмотреть радикальный, но потенциально рабочий "хак" — ручное изменение системных библиотек Windows, используемых для подключения к SQL Server. Этот метод предлагается в некоторых источниках и заключается в изменении строки версии OLE DB провайдера внутри DLL-файла на ту, которую "ожидает" 1С 8.1.

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

Выполним следующие шаги, если мы решили попробовать этот метод:

  1. Резервное копирование: Перед началом любых изменений, мы должны обязательно создать резервную копию файла, который мы собираемся патчить. Это критически важный шаг для возможности отката в случае проблем.
  2. Идентификация файла: Обычно в таких случаях предлагается патчить файл sqloledb.dll (расположенный, например, в С:\Program Files\Common Files\system\ole db\ для x86 систем) или sqlservr.dll. Нам необходимо убедиться, что мы работаем с правильным файлом.
  3. Использование HEX-редактора: Мы будем использовать HEX-редактор, такой как HxD, для открытия и модификации файла.
  4. Поиск строки версии: В HEX-редакторе нам нужно найти в юникоде (UTF-16) строку, соответствующую текущей версии OLE DB провайдера, которая может быть указана в тексте ошибки или в свойствах файла. Например, это может быть строка "10.00.17763". Важно, что вхождений такой строки может быть несколько; нам нужно найти первое.
  5. Изменение значения: Как только мы найдем нужную строку, мы должны заменить ее на ту версию, которую ожидает 1С 8.1. Например, мы заменяем "10.00.17763" на "08.00.0194".
  6. Заполнение нулями: Если новая строка короче исходной, мы должны заполнить оставшиеся символы нулями (в Unicode это `00 00`).
  7. Перезапуск службы: После сохранения измененного файла мы должны перезапустить службу SQL Server, а также службу сервера 1С:Предприятия, чтобы изменения вступили в силу.

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

Общие рекомендации и важные аспекты

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

  1. Резервное копирование: Мы всегда должны делать полные резервные копии баз данных и системных файлов перед началом любых изменений. Это наша "страховка" от потери данных и работоспособности системы.
  2. Тщательное тестирование: Любые изменения в окружении, особенно с неподдерживаемыми конфигурациями, должны быть тщательно протестированы в отдельной среде перед внедрением в рабочую систему. Это позволит нам выявить потенциальные проблемы до того, как они затронут критически важные операции.
  3. Оптимизация SQL Server: Для лучшей производительности 1С, даже на поддерживаемых версиях, мы рекомендуем правильно настроить SQL Server. Это включает в себя ограничение максимального объема памяти, выделяемого серверу SQL, и настройку параметра MAXDOP (Maximum Degree of Parallelism) на 1 для серверов с большим количеством ядер. Также важно регулярно обновлять статистику и реорганизовывать индексы.
  4. Риски использования устаревшего ПО: Мы понимаем, что использование неподдерживаемого программного обеспечения влечет за собой риски безопасности (отсутствие патчей), проблемы с соответствием требованиям, операционные сбои и увеличение затрат на обслуживание. Всегда взвешивайте эти риски при принятии решения о сохранении старой версии 1С или SQL Server.

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

← На главную