Freetds और unixodbc का उपयोग करके MS SQL कनेक्ट करना: isql - कोई डिफ़ॉल्ट ड्राइवर निर्दिष्ट नहीं है


28

मैं freetds और unixodbc का उपयोग करके 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

क्या किसी ने पहले ही उबंटू 12.04 पर freetds और unixodbc का उपयोग करके MS SQL डेटाबेस से सफलतापूर्वक कनेक्शन स्थापित कर लिया है ? थोड़ी सहायता वास्तव में प्रशंसनीय होगी।

नीचे मैं freetds और unixodbc को कॉन्फ़िगर करने के लिए उपयोग की जाने वाली प्रक्रिया है । आपकी सहायता के लिए अग्रिम धन्यवाद!

प्रक्रिया

सबसे पहले, मैंने निम्नलिखित पैकेजों को निम्न के साथ स्थापित किया है:

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

और कॉन्फ़िगर किए गए फ़्रीड्स निम्नानुसार हैं:

--- /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
स्टीव जी

जवाबों:


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
हे महान जवाब, लेकिन दुर्भाग्य से मैं इसे काम करने में सक्षम नहीं था, भले ही आपकी फ़ाइलों की नकल कर रहा हो। कारण पर कोई विचार? यह बहुत अधिक समान है, सिवाय इसके कि सर्वर हिस्से पर मैं एक आईपी का उपयोग करता हूं नाम नहीं। क्या आपको लगता है कि यह हो सकता है? बहुत बहुत धन्यवाद
पेड्रो ब्रज

14

यह करने के लिए कनेक्ट करने के लिए कैसे एक न्यूनतम लेकिन पूरा उदाहरण है Azure एसक्यूएल डाटाबेस के साथ isqlUbuntu 14.04.1 LTS से। उदाहरण उबंटू से अज़ोर 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>अब प्रकट होता है के लिए आवश्यक हो सकते हैं।
एड्रियन केइस्टर

7

मेरे विन्यास फाइल में सरल संकेत के कारण मेरे मामले में समस्या उत्पन्न हुई। इसलिए /etc/odbc.ini, मैंने सभी इंडेंट और वॉइला को हटा दिया !

( odbcinst.iniएक सामान्य बच्चे की तरह व्यवहार करता है और किसी भी नखरे को फेंकने के लिए प्रतीत नहीं होता है।)


धन्यवाद! मैं घूर रहा हूं कि 2 घंटे के लिए यह कॉन्फिगर यह जानने की कोशिश कर रहा था कि व्हाइट स्पेस मुद्दा था।
एलेक्स बार्कर

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

अब आकर्षक के रूप में काम करता है! धन्यवाद!


क्या अब सेटअप लाइन को हटा दिया गया है?
एड्रियन कीस्टर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.