Не удается подключиться к серверу MSSQL с помощью драйвера sqlcmd и odbc на RHEL 6
Я провел последний час, пытаясь подключиться к серверу mssql, используя sqlcmd через драйвер odbc. Я разговаривал с парнем из БД, но он, кажется, не имеет ни малейшего представления о том, что происходит.. Может, вы поможете мне найти некоторые вопросы, которые я мог бы задать этому парню..
Я использую официальный драйвер odbc от Microsoft. По-видимому, мы используем какие-то динамические порты.
Между ними нет брандмауэров.
# odbcinst -q -d -n
[PostgreSQL]
[MySQL]
[ODBC Driver 11 for SQL Server]
Я пробовал по-разному
Код ошибки 0x2AF9:
sqlcmd -S hostname\DEV04 -U username -P password
Sqlcmd: Error: Microsoft ODBC Driver 11 for SQL Server : Login timeout expired.
Sqlcmd: Error: Microsoft ODBC Driver 11 for SQL Server : A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online..
Sqlcmd: Error: Microsoft ODBC Driver 11 for SQL Server : TCP Provider: Error code 0x2AF9.
а также
Ошибка при поиске указанного сервера / экземпляра [xFFFFFFFF].
sqlcmd -S hostname\\DEV04 -U username -P password
Sqlcmd: Error: Microsoft ODBC Driver 11 for SQL Server : Login timeout expired.
Sqlcmd: Error: Microsoft ODBC Driver 11 for SQL Server : A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online..
Sqlcmd: Error: Microsoft ODBC Driver 11 for SQL Server : SQL Server Network Interfaces: Error Locating Server/Instance Specified [xFFFFFFFF].
Использование Perl
DBI connect('DASHBOARD','username',...) failed: [unixODBC][Microsoft][ODBC Driver 11 for SQL Server]Login timeout expired (SQL-HYT00) [state was HYT00 now 08001]
[unixODBC][Microsoft][ODBC Driver 11 for SQL Server]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online. (SQL-08001)
[unixODBC][Microsoft][ODBC Driver 11 for SQL Server]SQL Server Network Interfaces: Error Locating Server/Instance Specified [xFFFFFFFF]. (SQL-08001) at ./test.pl line 4
Can't connect to : [unixODBC][Microsoft][ODBC Driver 11 for SQL Server]Login timeout expired (SQL-HYT00) [state was HYT00 now 08001]
[unixODBC][Microsoft][ODBC Driver 11 for SQL Server]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online. (SQL-08001)
[unixODBC][Microsoft][ODBC Driver 11 for SQL Server]SQL Server Network Interfaces: Error Locating Server/Instance Specified [xFFFFFFFF]. (SQL-08001) at ./test.pl line 4.
3 ответа
После прочтения этой темы: https://github.com/Microsoft/msphpsql/issues/190
Я должен был узнать другой номер порта, который прослушивал SQL Server, выполнив
USE MASTER
GO
xp_readerrorlog 0, 1, N'Server is listening on'
GO
Результат
2018-04-12 03:19:57.830 Server Server is listening on [ 'any' <ipv6> 49155].
2018-04-12 03:19:57.830 Server Server is listening on [ 'any' <ipv4> 49155].
добавить правило для брандмауэра Windows на хосте SQL Server: - включение определенного порта 49155 (думаю, это может отличаться)
Затем эта команда прошла успешно на моей машине с Ubuntu:
sqlcmd -Smyhost,49155 -U sa -P sa_pwd -d mydb -Q "select @@servername"
Я столкнулся с аналогичной проблемой. Оказывается, что \DEV04
часть hostname\DEV04
используется для указания того, что клиент должен подключаться к серверу через порт, отличный от порта по умолчанию. В мире Microsoft, используя DEV04
автоматически гарантирует, что клиент подключается к правильному порту... но это не похоже на работу с Linux sqlcmd.
Спросите администратора SQL Server, какой порт \DEV04
Экземпляр прослушивает и подключается с помощью hostname,PORT
Основано на рекламе здесь: https://social.msdn.microsoft.com/Forums/sqlserver/en-US/36b8956e-0218-44aa-b717-725fe1d601f9/error-in-sqlserver-odbc-dirver-for-linux?forum=sqldataaccess
Протокол UDP просто не будет работать в Linux, используя предоставляемые Microsoft инструменты ODBC и sqlcmd. Часть UDP изначально используется для проверки сервера на наличие порта TCP, который прослушивает запрашиваемая база данных.
Решение, которое я использую в своей работе - это переключиться на pymssql, который будет работать с именованным экземпляром и запросами UDP-порта.