MS SQL'i freetds ve unixodbc kullanarak bağlama: isql - varsayılan sürücü belirtilmemiş


28

Freetds ve unixodbc kullanarak MS SQL veritabanına bağlanmaya çalışıyorum . Nasıl yapılacağını çeşitli kılavuzlar okudum, ancak kimse benim için iyi çalışıyor. İsql aracını kullanarak veritabanına bağlanmaya çalıştığımda aşağıdaki hatayı alıyorum:

$ 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'te freetds ve unixodbc kullanarak MS SQL veritabanına bağlantıyı başarıyla kurmuş olan var mı ? Gerçekten biraz yardım için minnettar olurum.

Freetds ve unixodbc yapılandırmak için kullanılan prosedür aşağıdadır . Yardımınız için şimdiden teşekkür ederiz!

prosedür

İlk önce, aşağıdaki paketleri kurdum:

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

ve aşağıdaki gibi yapılandırılmış freetds :

--- /etc/freetds/freetds.conf ---
[TS]
host = SERVER
port = 1433
tds version = 7.0
client charset = UTF-8

Tsql aracını kullanarak veritabanına başarılı bir şekilde yürüterek

tsql -S TS -U username -P password

Bir odbc bağlantısına ihtiyacım olduğu için odbcinst.ini dosyasını aşağıdaki gibi yapılandırdım :

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

ve odbc.ini aşağıdaki gibidir:

--- /etc/odbc.ini ---
[TS]
Description = "test"
Driver = FreeTDS
Servername = SERVER
Server = SERVER
Port = 1433
Database = DBNAME
Trace = No

Böyle bir yapılandırma ile isql aracını kullanarak veritabanına bağlanmaya çalışmak aşağıdaki hatayı doğurur:

$ isql -v TS username password
[IM002][unixODBC][Driver Manager]Data source name not found, and no default driver specified
[ISQL]ERROR: Could not SQLConnect

Kullanımı tsql:sudo apt-get install freetds-bin
Stevie G

Yanıtlar:


17

Teşekkürler, gönderiniz benim için çok yararlı oldu. Benim odbcinst.ini dosyamdan aşağıdaki satırları ortadan kaldırarak işe almak mümkün oldu

Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
FileUsage = 1
CPTimeout =
CPResuse  =
client charset = utf-8

öyleyse şimdi odbcinst.ini dosyam şöyle gözüküyor:

--- /etc/odbcinst.ini ---
[FreeTDS]
Description = FreeTDS
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so

ve odbc.ini dosyam şunun gibi görünüyor:

--- /etc/odbc.ini ---
[TS]
Description = "test"
Driver = FreeTDS
Server = SERVER
Port = 1433
Database = DBNAME

Bir keresinde her şeyi basitleştirdim, harika çalıştı. Hala RODBC ile çalışmasını sağlayamıyorum ama isql ile çalıştı.

Bunun yardımı olur mu bilmiyorum ama göreviniz bana yardımcı oldu. Teşekkürler.


Teşekkür, kesinlikle eksik sürücü ile ilgili/etc/odbcinst.ini
Dejan

1
Hey harika cevap ama ne yazık ki, dosyalarınızı kopyalarken bile çalışmasını sağlayamadım. nedenine dair herhangi bir düşünceniz? SERVER bölümünde bir IP değil bir isim kullanmam dışında hemen hemen aynı. Bunun olabileceğini mi düşünüyorsun? çok teşekkürler
Pedro Braz

14

Bu bağlanmak için nasıl minimal ama tam örnektir Azure SQL Veritabanı ile isqlUbuntu 14.04.1 LTS'den. Örnek, Azure SQL Veritabanına Nasıl Bağlanılacağından Ubuntu'dan alınmıştır .

Gerekli paketleri kurun

$ sudo apt-get -y install freetds-bin tdsodbc unixodbc

FreeTDS'yi yapılandırın

Dosya /etc/freetds/freetds.conf

[global]
tds version = 7.1

[<SERVERNAME>]
host = <HOST>.database.windows.net
port = 1433

Test bağlantısı

Bu noktada bağlantı kurmak tsqlgerekir:

$ tsql -S <SERVERNAME> -U <USERNAME>@<HOST> -P <PASSWORD>

@<HOST>Gerekli olduğunu unutmayın . Aksi halde bağlantı bir hatayla sona erer:

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 sürücüsünü yapılandır

Dosya /etc/odbcinst.ini

[FreeTDS]
Description = FreeTDS Driver
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so

ODBC veri kaynaklarını yapılandırma

Dosya /etc/odbc.ini

[<DATA_SOURCE_NAME>]
Driver = FreeTDS
Servername = <SERVERNAME>
Port = 1433
Database = <DBNAME>

<SERVERNAME>içinde aynıdır freetds.conf.

İsql ile iletişime geç

$ 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>Gerekli olduğunu unutmayın . Aksi halde bağlantı bir hatayla sona erer:

[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>Artık görünür alanda çalışmaya başladı.
Adrian Keister,

7

Benim durumumda sorun config dosyamdaki basit girintilerden kaynaklandı. Böylece /etc/odbc.ini, tüm girintileri ve ihanetleri kaldırdım !

( odbcinst.ininormal bir çocuk gibi davranır ve sinir krizi geçirmez).


TEŞEKKÜR EDERİM! Bu yapılandırmanın 2 saat boyunca beyaz boşluğun sorun olduğunu anlamaya çalışmasına bakıyordum.
Alex Barker,

3

12.04'ten önceki Ubuntu, /etc/odbcinst.ini dosyasında farklı bir odbc yoluna sahipti.

Eski sürücü yolu şuydu:

Driver = /usr/lib/odbc/libtdsodbc.so

Şunu değiştirdim:

Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so

İşte tam yapılandırma:

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

Şimdi bir cazibe gibi çalışıyor! Teşekkürler!


Kurulum satırı şimdi kullanımdan kaldırıldı mı?
Adrian Keister
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.