2013-02-27 41 views
3

我正嘗試連接到CentOS 5.8上的SQL Server 2008。我正在使用unixODBC 2.3.0和SQL Server ODBC驅動程序(www.microsoft.com/en-us/download/details.aspx?id=28160)。未能從Linux連接到SQl服務器

當我嘗試測試通過運行連接:

isql -v mydsn username password 

它GIVENS我:

[S1T00][unixODBC][Microsoft][SQL Server Native Client 11.0]Login timeout expired 
[08001][unixODBC][Microsoft][SQL Server Native Client 11.0]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. 
[08001][unixODBC][Microsoft][SQL Server Native Client 11.0]TCP Provider: Error code 0x2726 
[ISQL]ERROR: Could not SQLConnect 

的端口是開放的,服務器可以訪問。

我試圖進一步診斷問題,但得到困在這裏:

strace -e trace=network isql -v mydsn username password 
socket(PF_FILE, SOCK_STREAM, 0)   = 3 
connect(3, {sa_family=AF_FILE, path="/var/run/nscd/socket"...}, 110) = -1 ENOENT (No such file or directory) 
socket(PF_FILE, SOCK_STREAM, 0)   = 3 
connect(3, {sa_family=AF_FILE, path="/var/run/nscd/socket"...}, 110) = -1 ENOENT (No such file or directory) 
socket(PF_FILE, SOCK_STREAM, 0)   = 3 
connect(3, {sa_family=AF_FILE, path="/var/run/setrans/.setrans-unix"...}, 110) = 0 
sendmsg(3, {msg_name(0)=NULL, msg_iov(5)=[{"\1\0\0\0", 4}, {"\1\0\0\0", 4}, {"\1\0\0\0", 4}, {"\0", 1}, {"\0", 1}], msg_controllen=0, msg_flags=0}, MSG_NOSIGNAL) = 14 
socket(PF_FILE, SOCK_STREAM, 0)   = 4 
connect(4, {sa_family=AF_FILE, path="/var/run/nscd/socket"...}, 110) = -1 ENOENT (No such file or directory) 
socket(PF_FILE, SOCK_STREAM, 0)   = 4 
connect(4, {sa_family=AF_FILE, path="/var/run/nscd/socket"...}, 110) = -1 ENOENT (No such file or directory) 
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument) 
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument) 
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument) 
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument) 
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument) 
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument) 
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument) 
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument) 
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument) 
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument) 
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument) 
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument) 
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument) 
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument) 
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument) 
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument) 
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument) 
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument) 

顯然,還有與之建立連接的事情有些不對勁。

任何人都可以幫助我嗎?如果您需要其他信息,請告訴我。

感謝

+0

你確定這是一個默認實例而不是命名實例?您是否嘗試通過端口1433 telnet到服務器?您是否嘗試使用服務器名稱或IP地址而不是過時的DSN?您如何驗證端口是否打開並且服務器可以訪問?什麼港口?你怎麼知道這是正確的端口?細節,細節,細節... – 2013-02-27 02:55:47

回答

0

您可以打開ODBC跟蹤,並使用tcpdump的捕捉網絡包。我認爲odbc跟蹤會提供幫助。

8

當使用linux和odbc連接到Microsoft SQL Server的同時使用Microsoft的linux驅動程序時,'gotcha'是服務器的odbc.ini中的字符串也必須包含端口。

Server = [protocol:]server[,port] 

http://msdn.microsoft.com/en-us/library/hh568455.aspx 這比使用port = <portnumber>約定其他大多數設置不同的約定。如果沒有配置,您將看到'Could not SQLConnect'錯誤。

還要確保正在使用正確的odbc文件。

odbcinst -j 

將顯示配置的來源及其位置。

您以後可能會遇到的另一個問題是SQL Server的驅動程序是否忽略了odbc.ini中的用戶和密碼信息(如果它是純文本的),請確保您的應用程序處理該信息。

+0

如何指定命名實例? – baijum 2014-12-05 06:27:29

+0

我想抱抱你。 – Profpatsch 2016-12-07 04:49:17

+0

謝謝!這使我的一天 - 我希望你平穩 – ewm 2016-12-08 05:31:27

0

問題是我在EL5上使用EL6驅動。安裝正確的版本後,一切正常。感謝大家的迴應。

1

要調試的問題,請嘗試以下步驟:

  1. 的telnet < 1433>
  2. 進入SQL服務器的網絡配置
  3. TCP/IP設置
  4. 右鍵打開屬性
  5. 切換到網絡屬性選項卡
  6. IPAll屬性設置的動態端口空白和端口1433
  7. 重新啓動SQL服務