เชื่อมต่อ MS SQL โดยใช้ freetds และ unixodbc: isql - ไม่ระบุไดรเวอร์เริ่มต้น


28

ฉันพยายามที่จะเชื่อมต่อกับฐานข้อมูล MS SQL ใช้FreeTDSและunixODBC ฉันได้อ่านคำแนะนำต่าง ๆ เกี่ยวกับวิธีการใช้ แต่ไม่มีใครทำงานได้ดีสำหรับฉัน เมื่อฉันพยายามเชื่อมต่อกับฐานข้อมูลโดยใช้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

ให้ใครสร้างการเชื่อมต่อกับฐานข้อมูล MS SQL สำเร็จแล้วโดยใช้freetdsและ unixodbcบน Ubuntu 12.04? ฉันขอขอบคุณความช่วยเหลือ

ด้านล่างเป็นขั้นตอนที่ฉันใช้เพื่อกำหนดค่าfreetdsและ unixODBC ขอบคุณสำหรับความช่วยเหลือของคุณล่วงหน้า!

ขั้นตอน

ก่อนอื่นฉันได้ติดตั้งแพ็คเกจต่อไปนี้ด้วย:

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

วิธีใช้tsql:sudo apt-get install freetds-bin
Stevie 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
เฮ้คำตอบที่ดี แต่น่าเสียดายที่ฉันไม่สามารถทำงานได้แม้ว่าการคัดลอกไฟล์ของคุณ มีความคิดเกี่ยวกับเหตุผลว่าทำไม? มันค่อนข้างเหมือนกันยกเว้นว่าในส่วนของ SERVER ฉันใช้ IP ไม่ใช่ชื่อ คุณคิดว่าเป็นไปได้ไหม ขอบคุณมาก
Pedro Braz

14

นี่คือตัวอย่างที่น้อยที่สุด แต่สมบูรณ์วิธีการเชื่อมต่อกับAzure ฐานข้อมูล SQLกับisqlจากอูบุนตู 14.04.1 LTS ตัวอย่างนี้ถูกแยกจากฐานข้อมูล Azure SQL จาก Ubuntu (ข้อจำกัดความรับผิดชอบ: เป็นวิกิส่วนตัวของฉัน)

ติดตั้งแพ็คเกจที่จำเป็น

$ 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

ในกรณีของฉันปัญหาเกิดขึ้นเนื่องจากการเยื้องง่ายในไฟล์ config ของฉัน ดังนั้นใน/etc/odbc.iniฉันลบเยื้องและ voila ทั้งหมด!

( odbcinst.iniทำตัวเหมือนเด็กปกติและดูเหมือนจะไม่โกรธเคือง)


ขอขอบคุณ! ฉันได้รับการจ้องมองว่าการกำหนดค่านี้เป็นเวลา 2 ชั่วโมงพยายามที่จะคิดออกว่าพื้นที่สีขาวเป็นปัญหา
อเล็กซ์บาร์เกอร์

3

Ubuntu ก่อนหน้า 12.04 มีเส้นทาง odbc ที่แตกต่างกันในไฟล์ /etc/odbcinst.ini

เส้นทางไดรเวอร์เก่าคือ:

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.