web-dev-qa-db-ja.com

freetdsおよびunixodbcを使用したMS SQLの接続:isql-デフォルトのドライバーが指定されていません

freetdsおよびnixodbcを使用してMS SQLデータベースに接続しようとしています。私はそれを行う方法をさまざまなガイドで読みましたが、誰もうまくいきません。 isqlツールを使用してデータベースに接続しようとすると、次のエラーが表示されます。

$ isql -v TS username password
[IM002][unixODBC][Driver Manager]Data source name not found, and no default driver specified
[ISQL]ERROR: Could not SQLConnect

Ubuntu 12.04でfreetdsおよびnixodbcを使用して、MS SQLデータベースへの接続を誰かが既に正常に確立していますか?私はいくつかの助けを本当に感謝します。

以下はfreetdsおよびnixodbcを設定するために使用した手順です。事前にご協力いただきありがとうございます!

手順

まず、次のパッケージをインストールしました。

Sudo apt-get install unixodbc unixodbc-dev freetds-dev tdsodbc

freetds次のように構成されます。

--- /etc/freetds/freetds.conf ---
[TS]
Host = SERVER
port = 1433
tds version = 7.0
client charset = UTF-8

tsqlツールを使用すると、次のコマンドを実行してデータベースに正常に接続できます。

tsql -S TS -U username -P password

odbc接続が必要なので、次のようにodbcinst.iniを設定しました。

--- /etc/odbcinst.ini ---
[FreeTDS]
Description = FreeTDS
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
FileUsage = 1
CPTimeout =
CPResuse  =
client charset = utf-8

およびodbc.iniは次のとおりです。

--- /etc/odbc.ini ---
[TS]
Description = "test"
Driver = FreeTDS
Servername = SERVER
Server = SERVER
Port = 1433
Database = DBNAME
Trace = No

このような構成でisqlツールを使用してデータベースに接続しようとすると、次のエラーが発生します。

$ isql -v TS username password
[IM002][unixODBC][Driver Manager]Data source name not found, and no default driver specified
[ISQL]ERROR: Could not SQLConnect
28
Dejan

ありがとう、あなたの投稿は私にとって非常に役に立ちました。 odbcinst.iniファイルから次の行を削除することで、機能するようになりました

Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
FileUsage = 1
CPTimeout =
CPResuse  =
client charset = utf-8

したがって、私のodbcinst.iniファイルは次のようになります。

--- /etc/odbcinst.ini ---
[FreeTDS]
Description = FreeTDS
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so

そして、私のodbc.iniファイルは次のようになります。

--- /etc/odbc.ini ---
[TS]
Description = "test"
Driver = FreeTDS
Server = SERVER
Port = 1433
Database = DBNAME

すべてを簡素化すると、うまくいきました。 RODBCで動作させることはできませんが、isqlでは動作しました。

これが役立つかどうかはわかりませんが、あなたの投稿が私を助けてくれました。ありがとう。

17
John Cutsinger

これは、Ubuntu 14.04.1 LTSからisqlを使用して Azure SQL Database に接続する最小限の完全な例です。この例は、 buntuからAzure SQL Databaseに接続する方法 (免責事項:私個人のwiki)から抽出されています。

必要なパッケージをインストールします

$ Sudo apt-get -y install freetds-bin tdsodbc unixodbc

FreeTDSの構成

ファイル/etc/freetds/freetds.conf

[global]
tds version = 7.1

[<SERVERNAME>]
Host = <Host>.database.windows.net
port = 1433

接続のテスト

この時点で、tsqlとの接続は機能するはずです。

$ tsql -S <SERVERNAME> -U <USERNAME>@<Host> -P <PASSWORD>

@<Host>が必要であることに注意してください。そうでない場合、接続はエラーで終了します。

Msg 40531 (severity 11, state 1) from [<SERVERNAME>] Line 1:
    "Server name cannot be determined.  It must appear as the first segment of the server's dns name (servername.database.windows.net).  Some libraries do not send the server name, in which case the server name must be included as part of the user name (username@servername).  In addition, if both formats are used, the server names must match."
Error 20002 (severity 9):
    Adaptive Server connection failed
There was a problem connecting to the server

ODBCドライバーの構成

ファイル/etc/odbcinst.ini

[FreeTDS]
Description = FreeTDS Driver
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so

ODBCデータソースの構成

ファイル/etc/odbc.ini

[<DATA_SOURCE_NAME>]
Driver = FreeTDS
Servername = <SERVERNAME>
Port = 1433
Database = <DBNAME>

<SERVERNAME>freetds.confと同じです。

isqlで接続

$ isql -v <DATA_SOURCE_NAME> <USER>@<Host> <PASSWORD>
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> select current_timestamp
+------------------------+
|                        |
+------------------------+
| 2015-01-02 09:05:55.593|
+------------------------+
SQLRowCount returns 1
1 rows fetched
SQL>

@<Host>が必要であることに注意してください。そうでない場合、接続はエラーで終了します。

[S1000][unixODBC][FreeTDS][SQL Server]Unable to connect to data source
[37000][unixODBC][FreeTDS][SQL Server]Server name cannot be determined.  It must appear as the first segment of the server's dns name (servername.database.windows.net).  Some libraries do not send the server name, in which case the server name must be included as part of the user name (username@servername).  In addition, if both formats are used, the server names must match.
[ISQL]ERROR: Could not SQLConnect
14
user272735

私の場合、設定ファイルに単純なインデントがあるために問題が発生しました。 /etc/odbc.iniで、私はすべてのインデントを削除と出来上がり!

odbcinst.iniは通常の子供のように動作し、かんしゃくを投げないようです。)

7
Sudhanshu

12.04より前のUbuntuでは、/ etc/odbcinst.iniファイルに異なるodbcパスがありました。

古いドライバーパスは次のとおりです。

Driver = /usr/lib/odbc/libtdsodbc.so

私はそれを次のように変更しました:

Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so

完全な構成は次のとおりです。

--- /etc/odbcinst.ini ---
[FreeTDS]
Description = tdsodbc
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
FileUsage = 1
CPTimeout = 5
CPReuse = 5

魅力のようになりました!ありがとう!

3
MikeH