В данном руководстве мы рассмотрим распространенную проблему совместимости, с которой сталкиваются пользователи 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С:Предприятие 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 для конкретной базы данных, что может быть полезно для устаревших приложений, таких как 1С 8.1.
Разберем по шагам, как мы можем попробовать изменить уровень совместимости:
Важно учитывать: Изменение уровня совместимости базы данных позволяет приложению работать так, как если бы оно подключалось к более старой версии SQL Server, но это не влияет на все изменения на уровне самого сервера SQL Server. Некоторые функции, которые были полностью удалены из новых версий SQL Server, могут быть недоступны даже при использовании старого уровня совместимости. Тем не менее, это одна из возможных мер для сохранения старого поведения и может помочь обойти некоторые проблемы совместимости с OLE DB провайдером.
Альтернативный подход, который может решить проблему без обновления платформы 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, это может быть временным или компромиссным решением, которое требует тщательного тестирования.
В случае, когда другие методы не помогают или нежелательны, мы можем рассмотреть радикальный, но потенциально рабочий "хак" — ручное изменение системных библиотек Windows, используемых для подключения к SQL Server. Этот метод предлагается в некоторых источниках и заключается в изменении строки версии OLE DB провайдера внутри DLL-файла на ту, которую "ожидает" 1С 8.1.
Внимание: Этот метод является хаком и не является рекомендованным, поддерживаемым или безопасным решением. Манипуляции с системными библиотеками могут привести к нестабильности, ошибкам операционной системы, проблемам с безопасностью и могут быть отменены при системных обновлениях. Используйте его на свой страх и риск и только в тестовой среде.
Выполним следующие шаги, если мы решили попробовать этот метод:
sqloledb.dll (расположенный, например, в С:\Program Files\Common Files\system\ole db\ для x86 систем) или sqlservr.dll. Нам необходимо убедиться, что мы работаем с правильным файлом.Предостережение: Если при поиске исходного значения в DLL-файле мы не находим указанной строки или она не совпадает с ожидаемой, это означает, что у нас другая версия DLL. В таком случае патчить файл нельзя, так как это может привести к непредсказуемым последствиям.
При работе с устаревшими системами, особенно в нестандартных конфигурациях, мы всегда должны придерживаться следующих принципов:
MAXDOP (Maximum Degree of Parallelism) на 1 для серверов с большим количеством ядер. Также важно регулярно обновлять статистику и реорганизовывать индексы.Выбирая путь решения проблемы совместимости, мы должны взвесить все "за" и "против" каждого метода. Официальный путь (обновление платформы) всегда предпочтителен для долгосрочной стабильности и безопасности, но мы также рассмотрели альтернативные методы для тех случаев, когда обновление невозможно или нежелательно. В конечном итоге, цель состоит в том, чтобы обеспечить стабильную и надежную работу вашей информационной системы 1С:Предприятие.