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


28

freetdsunixodbcを使用して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でfreetdsunixodbcを使用して、MS SQLデータベースへの接続を既に確立している人はいますか?私はいくつかの助けを本当に感謝します。

以下は、freetdsunixodbcの構成に使用した手順です。事前にご協力いただきありがとうございます!

手順

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

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

使用するにはtsqlsudo apt-get install freetds-bin
スティービーG

回答:


17

ありがとう、あなたの投稿は私にとって非常に役に立ちました。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では動作しました。

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


おかげで、間違いなく、ドライバーの欠落に関連する/etc/odbcinst.ini
デヤン・

1
ちょっといい答えですが、残念ながら、たとえファイルをコピーしていても、それを機能させることができませんでした。理由についての考えは?SERVER部分で名前ではなくIPを使用することを除いて、ほとんど同じです。それが可能だと思いますか?おかげでたくさん
ペドロ・ブラズ

14

これはへの接続方法、最小限のが、完全な例であるAzureのSQLデータベースisqlのUbuntu 14.04.1 LTSから。この例は、UbuntuからAzure SQL Databaseを接続する方法(免責事項:個人用ウィキです)から抽出されています。

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

$ 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

@<HOST>もはや必要とされることが表示されません。
エイドリアン・ケイスター

7

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

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


ありがとうございました!ホワイトスペースが問題であることを理解しようとして、この構成を2時間見つめていました。
アレックスバーカー

3

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

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


セットアップラインは廃止されましたか?
エイドリアンキースター
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.