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
ありがとう、あなたの投稿は私にとって非常に役に立ちました。 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では動作しました。
これが役立つかどうかはわかりませんが、あなたの投稿が私を助けてくれました。ありがとう。
これは、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
私の場合、設定ファイルに単純なインデントがあるために問題が発生しました。 /etc/odbc.ini
で、私はすべてのインデントを削除と出来上がり!
(odbcinst.ini
は通常の子供のように動作し、かんしゃくを投げないようです。)
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
魅力のようになりました!ありがとう!