Я провел прошлый час, пытаясь соединиться с mssql сервером с помощью sqlcmd через odbc драйвер. Я говорил с парнем дб, но у него, кажется, нет подсказки, что продолжается.. Возможно, можно выручить меня для нахождения некоторых вопросов, я мог спросить того парня..
Я использую официальный odbc драйвер от Microsoft. Aparently мы используем своего рода динамические порты.
Нет никаких промежуточных брандмауэров.
# 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].
Используя жемчуг
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.
Я столкнулся с аналогичной проблемой. Оказывается, что часть \ DEV04
в имени хоста \ DEV04
используется, чтобы указать, что клиент должен подключаться к серверу через порт, отличный от порта по умолчанию. В мире Microsoft использование DEV04
автоматически гарантирует, что клиент подключается к правильному порту ... но, похоже, это не работает с Linux sqlcmd.
Спросите администратора SQL Server, какой порт Экземпляр \ DEV04
прослушивает и подключается, используя имя хоста, PORT
Прочитав эту ветку: 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"
На основе рекламного сообщения отсюда: 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.