2011-12-14 55 views
23

Tôi đang cố gắng kết nối với SQL Server 2005 DB từ máy Mac bằng cách sử dụng unixODBC và FreeTDS như tôi đã nêu here. Tuy nhiên, khi tôi cố gắng để kết nối vào một DB khác nhau sử dụng cùng một thiết lập, tôi nhận được:Lỗi "Máy chủ thích ứng không khả dụng hoặc không tồn tại" khi kết nối với SQL Server từ PHP

Connection Failed:[FreeTDS][SQL Server]Unable to connect: Adaptive Server is unavailable or does not exist. 

Đây là thiết lập freetds.conf tôi:

[my_db] 
host = 12.34.56.789 
port = 1433 
tds version = 8.0 

Và đây là ODBC.INI của tôi:

[my_dsn] 
Driver = /opt/local/lib/libtdsodbc.so 
Description = My Database 
Trace = no 
Servername = my_db 
Database = MyDB 

[ODBC Data Sources] 
my_dsn = FreeTDS 

tôi vẫn có thể kết nối đến DB khác tôi thiết lập trên máy tính này (được mô tả trong bài viết trên blog của tôi liên kết ở trên), vì vậy tôi khá chắc chắn rằng lỗi không phải là ở đầu Mac. Tôi đã xác minh trên máy chủ mà tôi đang sử dụng đúng địa chỉ IP và cổng. Bất kỳ suy nghĩ về những gì có thể là vấn đề, và nếu nó trên máy chủ kết thúc?

+0

tôi đã tìm thấy các tệp ini sau. Tôi sẽ sử dụng cái nào? './root/php/freetds-0.91/samples/odbc.ini ./usr/local/unixODBC/etc/odbc.ini ./usr/local/etc/odbc.ini ./usr/share/doc /freetds-devel-0.64/samples/odbc.ini ./etc/php.d/odbc.ini ./etc/odbc.ini ./var/tmp/php-5.2.6-2-root-root /etc/php.d/odbc.ini ' – shorif2000

+1

Tôi không thể tìm thấy' libtdsodbc.so' ở bất cứ đâu có lệnh 'find'. Tôi đang sử dụng centos 5 – shorif2000

Trả lời

9

Có vẻ như bạn gặp sự cố với nguồn dữ liệu dsn hoặc odbc của mình.

Hãy thử bỏ qua DSN đầu tiên và kết nối sử dụng:

TDSVER=8.0 tsql -S *serverIPAddress* -U *username* -P *password* 

Nếu thành công, bạn biết nó là một vấn đề với DSN của bạn hoặc với freetds sử dụng DSN của bạn. Ngoài ra, có thể phiên bản tds của bạn không tương thích với máy chủ của bạn. Bạn có thể muốn thử các cài đặt TDSVER khác (5.0, 7.0, 7.1).

+1

'TDSVER = 8.0 tsql -S * serverIPAddress * -U * tên người dùng * -P * mật khẩu *' điều này làm việc cho tôi nhưng trong freetds không có sự khác biệt – shorif2000

4

đáp ứng bởi vì câu trả lời này đã đưa ra đầu tiên cho tìm kiếm khi tôi đã có cùng một vấn đề: [08S01] [unixODBC] [freetds] [SQL Server] Không thể kết nối: Adaptive Server không có sẵn hoặc không tồn tại

Các trường hợp được đặt tên MSSQL phải được cấu hình đúng cách mà không cần thiết lập cổng. (http://freetds.schemamania.org/userguide/freetdsconf.htm nói set dụ hoặc cổng NOT CẢ)

freetds.conf

[Name] 
host = Server.com 
instance = instance_name 
#port = port is found automatically, don't define explicitly 
tds version = 8.0 
client charset = UTF-8 

Và trong ODBC.INI chỉ vì bạn có thể thiết lập Port, KHÔNG khi bạn đang sử dụng một trường hợp được đặt tên.

+1

http://freetds.schemamania.org/userguide/ freetdsconf.htm không hoạt động nữa – Jan

4

Tôi gặp vấn đề tương tự, sự cố của tôi là tường lửa trên máy chủ không mở từ địa chỉ IP hiện tại.

24

1. thông tin Xem về máy chủ SQL

tsql -LH SERVER_IP_ADDRESS 

locale is "C" 
locale charset is "646" 
ServerName TITAN 
InstanceName MSSQLSERVER 
IsClustered No 
Version 8.00.194 
tcp 1433 
np \\TITAN\pipe\sql\query 

2. Đặt freetds.conf bạn

tsql -C  
freetds.conf directory: /usr/local/etc 

[TITAN] 
host = SERVER_IP_ADDRESS 
port = 1433 
tds version = 7.2 

3 Hãy thử

tsql -S TITAN -U user -P password 

HOẶC

'dsn' => 'dblib:host=TITAN:1433;dbname=YOURDBNAME', 

Xem thêm http://www.freetds.org/userguide/confirminstall.htm(Ví dụ 3-5.)

Nếu bạn nhận được thông báo 20009, hãy nhớ rằng bạn chưa kết nối với máy. Đó là sự cố cấu hình hoặc mạng, không phải là lỗi giao thức. Xác minh máy chủ đang hoạt động, có tên và địa chỉ IP mà FreeTDS đang sử dụng và đang lắng nghe cổng được cấu hình.

+2

Cảm ơn vì điều này, tôi cần xác định cổng ('ip: port' cho pymssql) và lệnh LH cho phép tôi dễ dàng tìm thấy nó. – Adversus

+0

Nếu tsql -LH không có đầu ra, bước tiếp theo sẽ được thực hiện là gì? – brad

+0

Có phải 'SERVER_IP_ADDRESS' không đúng? Thử ping tới IP này –

-5

Bud, vô hiệu hóa SELinux hoặc thêm dòng sau vào RedHat/CentOS Server của bạn:

setsebool -P httpd_can_network_connect_db 1 
setsebool -P httpd_can_network_connect 1 

nhất luôn!

6

Sau không biết bao nhiêu giờ thất vọng Tôi quản lý để có được tất cả làm việc:

ODBCINST.INI:

[FreeTDS] 
Description = FreeTDS Driver v0.91 
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so 
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so 
fileusage=1 
dontdlclose=1 
UsageCount=1 

ODBC.INI:

[test] 
Driver = FreeTDS 
Description = My Test Server 
Trace = No 
#TraceFile = /tmp/sql.log 
ServerName = mssql 
#Port = 1433 
instance = SQLEXPRESS 
Database = usedbname 
TDS_Version = 4.2 

FreeTDS.conf :

[mssql] 
host = hostnameOrIP 
instance = SQLEXPRESS 
#Port = 1433 
tds version = 4.2 

kết nối thử nghiệm đầu tiên (MSSQL là một tên đoạn từ freetds.conf):

tsql -S mssql -U username -P password 

Bạn phải nhìn thấy một số cài đặt nhưng không có lỗi và chỉ có một dấu nhắc 1>. Sử dụng thoát để thoát.

Sau đó, hãy kiểm tra DSN/freetds (kiểm tra là một tên đoạn từ ODBC.INI; -v nghĩa verbose):

isql -v test username password -v 

Bạn phải nhìn thấy thông báo kết nối!

Các vấn đề liên quan