web-dev-qa-db-ja.com

「Adaptive Serverが利用できないか存在しません」からSQL Serverへの接続エラーPHP

here で概説したように、unixODBCとFreeTDSを使用して、MacからSQL Server 2005 DBに接続しようとしています。ただし、同じセットアップを使用して別のDBに接続しようとすると、次のようになります。

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

Freetds.confのセットアップは次のとおりです。

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

そして、ここに私のodbc.iniがあります:

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

[ODBC Data Sources]
my_dsn = FreeTDS

このコンピューターに設定した他のDB(上記のリンク先のブログ投稿で説明)にまだ接続できるので、エラーはMac側ではないと確信しています。サーバーで、正しいIPアドレスとポートを使用していることを確認しました。何が問題になる可能性があるのか​​、それがサーバー側にあるのか?

36
wonder95

1。 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。 freetds.confを設定します

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

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

3 Try

tsql -S TITAN -U user -P password

OR

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

http://www.freetds.org/userguide/confirminstall.htm(例3-5。)

メッセージ20009を受け取った場合は、マシンに接続していないことを思い出してください。プロトコルの障害ではなく、構成またはネットワークの問題です。サーバーが起動し、FreeTDSが使用している名前とIPアドレスを持ち、設定されたポートをリッスンしていることを確認します。

36

Dsnまたはodbcデータソースに問題があるようです。

最初にdsnをバイパスして、次を使用して接続してみてください。

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

それが機能する場合、dsnまたはdsnを使用するfreetdsに問題があることがわかります。また、tdsバージョンがサーバーと互換性がない可能性があります。他のTDSVER設定(5.0、7.0、7.1)を試してください。

12
Jim Clouse

数え切れないほどのフラストレーションの後、私はなんとかすべてを機能させることができました。

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

最初のテスト接続(mssqlfreetds.conf)からのセクション名です:

tsql -S mssql -U username -P password

いくつかの設定が表示される必要がありますが、エラーは表示されず、1>プロンプトのみが表示されます。 quitを使用して終了します。

次に、DSN/FreeTDSをテストしましょう(testodbc.iniからのセクション名です; -vは詳細を意味します):

isql -v test username password -v

Connected!というメッセージが表示されるはずです。

9
Jan

私は同じ問題を抱えていました。私の問題は、サーバー上のファイアウォールが現在のIPアドレスから開かれていないことでした。

7
Rob Forrest

私が同じ問題を抱えていたときに、この答えが検索のために最初に出たので応答します:

[08S01] [unixODBC] [FreeTDS] [SQL Server]接続できません:Adaptive Serverが利用できないか存在しません

MSSQL名前付きインスタンスは、ポートを設定せずに適切に構成する必要があります。 ( freetds configのドキュメント はインスタンスまたはポートを両方とも設定しないことを示します)

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

また、ポートを設定できるからといってodbc.iniで名前付きインスタンスを使用しているときはいけません。

5
Naidim

ファイアウォールに問題があることがわかりました。そのため、IPがホワイトリストに登録されており、ファイアウォールが接続をブロックしていないことを確認してください。接続性は次の方法で確認できます。

tsql -H somehost.com -p 1433

私の場合、出力は次のとおりです。

Error 20009 (severity 9):
  Unable to connect: Adaptive Server is unavailable or does not exist
  OS error 111, "Connection refused"
There was a problem connecting to the server
2
Developer