Проблема подключения к SQL серверу через FreeTDS/UnixOdbc

Вопрос или проблема

Я пытаюсь подключиться к серверу MS-SQL через ODBC, вероятно, это один из самых задаваемых вопросов, но этот вопрос очень странный, потому что та же конфигурация работает на моем локальном компьютере, я имею в виду, что я всё сделал на своем локальном компьютере, и всё в порядке, а вот на другом компьютере не работает.

Я установил необходимые пакеты через

sudo apt-get install unixodbc unixodbc-dev freetds-dev freetds-bin tdsodbc

Мои конфигурации

/etc/freetds/freetds.conf
# Типичный сервер Microsoft
[SQLDemo]
host = xxx.xxx.xxx.xxx
port = 1433
tds version = 8.0      # Я также пробовал 7.0, 7.2
-----------------------------------------------
/etc/odbc.ini
[SQLDemo]
Driver = FreeTDS
Description = ODBC соединение через FreeTDS
Trace = No
Server=xxx.xxx.xxx.xxx\SQL2014      # Я также пробовал servername=SQLDemo
Database = MY_DB_NAME
-----------------------------------------------
/etc/odbcinst.ini
[ODBC]
Trace=Yes
TraceFile=/home/odbc_trace.log

[FreeTDS]
Description = TDS Driver (Sysbase/MS SQL)
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup =  /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
FileUsage = 1

Я запускаю следующий код и получаю ошибку

cnnstr="DSN=%s;UID=%s;PWD=%s" % ('SQLDemo', 'xyz', 'xyz');
db = pyodbc.connect(cnnstr);

pyodbc.Error: ('08001', '[08001] [unixODBC][FreeTDS][SQL Server]Не удалось подключиться к источнику данных (0) (SQLDriverConnect)')

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

Оба компьютера работают на Ubuntu 16.04

Заранее спасибо

Проблема была связана с портом по умолчанию экземпляра SQL Server на целевом компьютере, он был изменён на 1434. Так что вся конфигурация правильная, нужно просто скорректировать номер порта, также перед подключением убедитесь в порте SQL Server.

Ответ или решение

Проблема подключения к SQL Server через FreeTDS/UnixODBC

При установке соединения с MS SQL Server через ODBC, как правило, возникает ряд распространённых проблем, которые могут быть связаны с конфигурацией, настройками сети или версиями драйверов. В данном случае мы разберёмся с проблемами, возникшими на другой машине, несмотря на то что та же конфигурация успешно работает на локальном компьютере.

Описание текущей конфигурации

Вы установили необходимые пакеты с помощью команды:

sudo apt-get install unixodbc unixodbc-dev freetds-dev freetds-bin tdsodbc

Конфигурационные файлы, которые вы указали, следующие:

1. /etc/freetds/freetds.conf
[SQLDemo]
host = xxx.xxx.xxx.xxx
port = 1433
tds version = 8.0      # Также пробовали 7.0, 7.2
2. /etc/odbc.ini
[SQLDemo]
Driver = FreeTDS
Description = ODBC connection via FreeTDS
Trace = No
Server=xxx.xxx.xxx.xxx\SQL2014  # Также пробовали servername=SQLDemo
Database = MY_DB_NAME
3. /etc/odbcinst.ini
[ODBC]
Trace=Yes
TraceFile=/home/odbc_trace.log

[FreeTDS]
Description = TDS Driver (Sysbase/MS SQL)
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup =  /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
FileUsage = 1

Запуск кода приводит к возникновению следующей ошибки:

cnnstr="DSN=%s;UID=%s;PWD=%s" % ('SQLDemo', 'xyz', 'xyz')
db = pyodbc.connect(cnnstr)

pyodbc.Error: ('08001', '[08001] [unixODBC][FreeTDS][SQL Server]Unable to connect to data source (0) (SQLDriverConnect)')

Устранение неполадок при подключении

1. Проверка порта SQL Server.

Одна из самых распространённых причин, по которой может не работать подключение, — неправильный порт SQL Server. В данном случае, как вы указали, целевой сервер настроен на использование порта 1434, в то время как в конфигурации указан порт 1433. Убедитесь, что используете правильный порт. Обновите конфигурацию в freetds.conf и odbc.ini, установив:

port = 1434  # пример, настройте на нужный порт вашего SQL Server

2. Проверка сетевого доступа.

Убедитесь, что сервер SQL доступен из вашей сети. Проверьте доступность, используя команду telnet или nc:

telnet xxx.xxx.xxx.xxx 1434

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

3. Правильный формат сервера.

В odbc.ini проверьте правильность формата записи сервера. Вместо использования Server=xxx.xxx.xxx.xxx\SQL2014, попробуйте использовать:

Server=xxx.xxx.xxx.xxx
Port=1434  # или ваш действительный порт

4. Логи и трассировка.

Поскольку трассировка включена, просмотрите файл лога /home/odbc_trace.log для получения более подробной информации об ошибке. Это может дать подсказки о том, где именно происходит сбой.

5. Версии драйвера FreeTDS.

Убедитесь, что версия FreeTDS, установленная на вашем сервере, совместима с версией SQL Server. Иногда потребуются изменения в конфигурации, чтобы использовать правильный TDS протокол. Вы можете проверить установленную версию командой:

tsql -C

Заключение

Проблема подключения к SQL Server через FreeTDS и UnixODBC может быть вызвана несколькими факторами, включая неверный порт, сетевые настройки, формат подключения и совместимость версий. Следуя описанным выше шагам, вы сможете выявить и устранить причину сбоя соединения. Убедитесь в правильности конфигурационных файлов и сделайте необходимые изменения, основанные на вашей среде.

Если после выполнения всех шагов проблема сохраняется, рекомендуется обратиться к более детальным логам, проверить настройки сетевой безопасности или рассмотреть возможность использования дополнительных инструментов управления базами данных для диагностики.

Оцените материал
Добавить комментарий

Капча загружается...