freetd 및 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

다음과 같이 freetd 를 구성 했습니다 .

--- /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

사용하려면 tsql:sudo 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
Dejan

1
훌륭한 답변이지만 불행히도 파일을 복사하더라도 작동하지 못했습니다. 이유에 대한 어떤 생각? 서버 부분에서 이름이 아닌 IP를 사용한다는 점을 제외하면 거의 동일합니다. 당신은 그것이 될 수 있다고 생각합니까? 고마워
Pedro Braz

14

이에 연결하는 방법을 최소한하지만 완벽한 예입니다 푸른 SQL 데이터베이스isql우분투 14.04.1 LTS에서. 이 예제는 Ubuntu에서 Azure SQL 데이터베이스를 연결하는 방법 (면책 조항 : 개인 위키) 에서 추출한 것 입니다.

필요한 패키지 설치

$ 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>더 이상 나타납니다이 필요합니다.
Adrian Keister

7

내 경우에는 구성 파일에 들여 쓰기가 간단하여 문제가 발생했습니다. 그래서에서 /etc/odbc.ini, 나는 모든 들여 쓰기 제거 를 늘리면됩니다!

( odbcinst.ini정상적인 아이처럼 행동하며 울화를 던지지 않는 것 같습니다.)


고맙습니다! 공백이 문제라는 것을 알아 내려고 2 시간 동안이 구성을 쳐다보고 있습니다.
Alex Barker

3

12.04 이전의 우분투는 /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

지금은 매력처럼 작동합니다! 감사!


설정 라인이 더 이상 사용되지 않습니까?
Adrian Keister
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.