Адаптивный сервер недоступен или не существует

Я пытаюсь подключиться к серверу mssql через FreeTDS.

Сначала я попробовал это через ODBC Driver 17 for SQL Server и это работает. Вот моя конфигурация в settings.py.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    },
    'mssql_database': {
        'ENGINE': 'django_pyodbc',
        'NAME': 'blabla', 
        'USER': 'blabla', 
        'PASSWORD': 'blabla', 
        'HOST': '10.65.1.20', 
        'PORT': '',  
        'OPTIONS': {
            'driver': 'ODBC Driver 17 for SQL Server', 
        },
    },
   
}

В соответствии с этим руководством я установил FreeTDS на Ubuntu 18.04.

Вот моя /etc/odbcinst.ini

[ODBC Driver 17 for SQL Server]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.9.so.1.1
UsageCount=1


[FreeTDS]
    Description = TDS driver (Sybase/MS SQL)
    Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
    Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
    CPTimeout =
    CPReuse =

А вот новый раздел settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    },
    'mssql_database': {
        'ENGINE': 'django_pyodbc',
        'NAME': 'blabla', 
        'USER': 'blabla',  
        'PASSWORD': 'blabla', 
        'HOST': '10.65.1.20', 
        'PORT': '', 
        'OPTIONS': {
            'driver': 'FreeTDS', 
            'host_is_server': True,
            'extra_params': "TDS_VERSION=8.0"
        },
    },
}

И у меня есть это сообщение об ошибке pyodbc.OperationalError: ('08S01', '[08S01] [FreeTDS][SQL Server]Unable to connect: Adaptive Server is unavailable or does not exist (20009) (SQLDriverConnect)')

Как я могу исправить ошибку? Соединение работает с ODBC Driver 17 for SQL Server. Почему же оно не работает с драйвером FreeTDS? Может ли это быть из-за отсутствия файла /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so? Я не могу найти libtdsS.so.

$ pip list
Package       Version
------------- -------
Django        1.8
django-pyodbc 1.1.3
pip           21.3.1
pyodbc        4.0.32
setuptools    59.6.0
sqlany-django 1.13
sqlanydb      1.0.11
wheel         0.37.1

Как вы заметили, установите PORT на 1433 - но это только часть того, что вам нужно сделать.

TDS_Version=8.0 является недействительным и будет ломаться на новых версиях FreeTDS выше 1.3: https://www.freetds.org/userguide/ChoosingTdsProtocol.html

Поскольку Ubuntu 18 поставляется с FreeTDS версии 1.00.82, вам следует использовать версию 7.4 протокола TDS, предполагая, что вы используете SQL Server 2012 или выше.

Измените параметры следующим образом:

'OPTIONS': {
    'driver': 'FreeTDS', 
    'host_is_server': True,
    'extra_params': "TDS_Version=7.4"
},

Возможно, вам придется повторно выполнить миграции, если таковые имеются, поскольку новые версии TDS поддерживают больше полей SQL Server, таких как DATE и DATETIME2 - но похоже, что вы используете SQL Server только для чтения. Удачи!

Вернуться на верх