Ошибка 20002 при попытке подключиться к серверу через tsql (OS X)

#sql-server #macos #pyodbc #freetds

#sql-сервер #macos #pyodbc #freetds

Вопрос:

Я использовал это руководство для подключения к базе данных через pyodbc: https://github.com/mkleehammer/pyodbc/wiki/Connecting-to-SQL-Server-from-Mac-OSX

Мои конфигурационные файлы выглядят так, параллельно с учебным пособием: В freetds.conf:

 [MYMSSQL]
host = localhost
port = 1433
tds version = 7.3
 

В odbc.ini:

 [MYMSSQL]
Description         = Testing SQLServer
Driver              = FreeTDS
Servername          = MYMSSQL
 

В odbcinst.ini:

 [FreeTDS]
   Description=FreeTDS Driver for Linux amp; MSSQL
   Driver=/usr/local/lib/libtdsodbc.so
   Setup=/usr/local/lib/libtdsodbc.so
   UsageCount=1
 

Когда я проверяю соединение с помощью «tsql -S MYMSSQL -U myuser -P mypassword», я получаю сообщение об ошибке:

 Error 20002 (severity 9):
    Adaptive Server connection failed
There was a problem connecting to the server
 

Аналогично, «isql MYMSSQL myuser mypassword» также возвращает ошибку:

 [ISQL]ERROR: Could not SQLConnect
 

РЕДАКТИРОВАТЬ: в консоли запросов:

«SELECT @@SERVERNAME» возвращает «4a70ffff1294»

«SELECT @@SERVICENAME» возвращает «MSSQLSERVER»

«ВЫБЕРИТЕ @@VERSION» возвращает «Microsoft SQL Server 2019 (RTM-CU8) (KB4577194) — 15.0.4073.23 (X64)»

 tsql -S MYMSSQL
 

ВОЗВРАТ

 locale is "en_US.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
Error 20002 (severity 9):
    Adaptive Server connection failed
There was a problem connecting to the server
 

Сервер запущен в образе docker. Я могу подключиться к нему через инструмент базы данных pycharm с помощью порта 1433 и соответствующего пароля. К сожалению, я не очень разбираюсь в управлении серверами. Вся помощь очень ценится.

Комментарии:

1. К какой версии SQL Server вы пытаетесь подключиться? Версия TDS 7.3 относится только к SQL Server 2008, который больше не поддерживается. Вероятно, вы хотите использовать как минимум TDS версии 7.4 для SQL Server 2012 и более поздних версий.

2. TDS 7.1, 7.2, 7.3 и 7.4 будут работать для SQL Server 2008 , но не со всеми новейшими функциями. Его версия FreeTDS может не поддерживать 7.4.

3. Команда «ВЫБРАТЬ @@VERSION» в консоли запросов возвращает «Microsoft SQL Server 2019 (RTM-CU8) (KB4577194) — 15.0.4073.23 (X64) 23 сентября 2020 16:03:08 Авторское право (C) 2019 Microsoft Corporation Developer Edition (64-разрядная версия) на Linux (Ubuntu 18.04.5 LTS) <X64>»

Ответ №1:

Если вы хотите продолжить этот путь, нам понадобится дополнительная информация. Что в вашем freetds.conf ? Можете ли вы подключиться к своему SQL Server с компьютера, на который вы пытаетесь установить FreeTDS telnet mssql.myhost.com 1433 ?

Тем не менее, мне проще избежать использования freetds.conf and odbc.ini и просто сохранить все в Python. Если вы правильно настроили odbcinst.ini , вы должны быть в состоянии сделать что-то вроде этого:

 import pyodbc

con = pyodbc.connect(
    "DRIVER={FreeTDS};"
    "SERVER=mssql.yourserver.com;"
    "PORT=1433;"
    "DATABASE=your_db;"
    "UID=your_user;"
    "PWD=your_pass;"
    "TDS_Version=7.3;"
)
cursor = conn.cursor()

cursor.execute("SELECT 1")

for row in cursor.fetchall():
    print(row)
 

Удачи!

Комментарии:

1. conn = pyodbc.connect( «ДРАЙВЕР ={FreeTDS};» «СЕРВЕР = MYMSSQL;» «ПОРТ = 1433;» «БАЗА ДАННЫХ = ArtGallery;» «UID= SA;» «PWD=4916Hyperbolic *;» «TDS_Version=7.3;» ) возвращает: pyodbc. Операционная ошибка: (‘08001’, ‘[08001] [ FreeTDS][SQL Server]Не удается подключиться к источнику данных (0) (SQLDriverConnect)’)

2. Используйте полное доменное имя, а не MYMSSQL — например, mssql.myserver.com . Или IP-адрес. Кроме того, что происходит, когда вы пытаетесь telnet mssql.myhost.com 1433 выполнить команду на вашем хосте MSSQL? Подключается ли он или просто зависает при попытке?

3. Я заменил «SERVER = MYMSSQL;» на «SERVER = 178.241.125.37;» , который является моим IP-адресом. Теперь он перестает отвечать. Я предполагаю, что он пытается дождаться ответа от сервера? большое спасибо за ваше время btw_