Linux 配置 unixODBC 訪問 MS SQL Server 說明

來源:互聯網
上載者:User

 

一.安裝 unixODBC

這個使用YUM安裝一下,不多說:

Linux 使用光碟片搭建 本地 YUM 伺服器

http://blog.csdn.net/tianlesoftware/article/details/7302358

 

[root@rac1 mnt]# yum install unixODBC     

[root@rac1 mnt]# yum install unixODBC-devel

 

確認unixODBC的安裝,使用 isql命令,其是unixODBC內建的命令。可以使用這個命令驗證unixODBC的配置。

 

[root@rac1 /]# isql --version

unixODBC 2.2.14

[root@rac1 /]# which isql

/usr/bin/isql

[root@rac1 /]# isql

 

**********************************************

* unixODBC - isql                            *

**********************************************

* Syntax                                     *

*                                            *

*     isql DSN [UID [PWD]] [options]       *

*                                            *

* Options                                    *

*                                            *

* -b        batch.(no prompting etc)        *

* -dx       delimit columns with x          *

* -x0xXX    delimit columns with XX, where  *

*           x is in hex, ie 0x09 is tab     *

* -w        wrap results in an HTML table   *

* -c        column names on first row.      *

*           (only used when -d)             *

* -mn       limit column display width to n *

* -v        verbose.                        *

* -lx       set locale to x                 *

* -q        wrap char fields in dquotes     *

* -3        Use ODBC 3 calls                *

* -n        Use new line processing         *

* --version version                         *

*                                            *

* Commands                                   *

*                                            *

* help - list tables                         *

* help table - list columns in table         *

* help help - list all help options          *

*                                           *

* Examples                                   *

*                                            *

*     isql WebDB MyID MyPWD -w < My.sql    *

*                                            *

*     Each line in My.sql must contain     *

*     exactly 1 SQL command except for the *

*     last line which must be blank (unless *

*     -n option specified).                *

*                                            *

* Please visit;                              *

*                                            *

*     http://www.unixodbc.org              *

*     pharvey@codebydesign.com             *

*     nick@easysoft.com                    *

**********************************************

 

[root@rac1 /]#

 

二.安裝 FreeTDS

freeTDS官網地址:http://www.freetds.org/

 

FreeTDS is a setof libraries for Unix and Linux that allows your programs to natively talk toMicrosoft SQL Server and Sybase databases.

--FreeTDS是Unix 和Linux library的一個集合,通過FreeTDS可以串連到MicrosoftSQL Server 和 Sybase DB。

 

2.1 下載freeTDS:

[root@rac1 ~]# wget http://ibiblio.org/pub/Linux/ALPHA/freetds/current/freetds-current.tgz

--2012-03-06 10:14:43-- http://ibiblio.org/pub/Linux/ALPHA/freetds/current/freetds-current.tgz

Resolving ibiblio.org... 152.19.134.40

Connecting toibiblio.org|152.19.134.40|:80... connected.

HTTP request sent, awaiting response... 200OK

Length: 2192516 (2.1M) [application/x-gzip]

Saving to: “freetds-current.tgzâ€

 

100%[==========================================================>]2,192,516   43.7K/s   in 37s    

 

2012-03-06 10:15:21 (58.5 KB/s) -“freetds-current.tgz†saved [2192516/2192516]

 

 

2.2 安裝freeTDS:

FreeTDS 的安裝協助,可以參考:

unixODBC - MS SQL Server/PHP

http://www.unixodbc.org/doc/FreeTDS.html

 

[root@rac1 ~]# tar xzf freetds-current.tgz

 

--查看configure的協助文檔:

[root@rac1 freetds-0.92.dev.20120305]# ./configure --help

 

--官網提供的方法:
# ./configure --with-tdsver=8.0--with-unixodbc=/usr/local 
# make 
# make install

 

注意這裡:

如果 unixODBC是源碼安裝, 則–with-unixodbc=/usr/local
如果 unixODBC是rpm安裝, 則不需要該選項

 

我們的unixODBC 是通過RPM包安裝的,所以這裡我們省略這個選項,直接configure。

 

# ./configure --with-tdsver=8.0 --prefix=/usr/local/freetds --enable-msdblib  --with-gnu-ld  --enable-shared  --enable-static

--這次configure成功。這裡我們將freetds 安裝到/usr/local 目錄下。

 

然後make:

# make 
# make install

 

2.3 配置環境變數

將freetds的庫檔案所在路徑配置到LD_LIBRARY_PATH參數中: 
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/freetds/lib/: 

設定bin路徑 
$vi /root/.bashrc 
新增內容如下: 
export FREETDS=/usr/local/freetds 
export $PATH="$PATH:$FREETDS/bin" 

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/freetds/lib

 

三. 配置unixODBC 和 FreeTDS

 

3.1 向unixODBC登記 FreeTDS 驅動

修改/etc/odbcinst.ini (或者/usr/local/etc/odbcinst.ini) 檔案,添加如下內容:

 

# Driver from FreeTDS package
# setup from FreeTDS package
[FREETDS]
Description = ODBC of FreeTDS for MS SQL 2008
Driver = /usr/local/lib/libtdsodbc.so
FileUsage = 1

 

3.2  在 FreeTDS 的設定檔中添加指向具體資料庫的訪問資訊

 

修改/usr/local/etc/freetds.conf檔案,添加如下內容:
[MYSQLSERVER]

       host = 192.168.3.211

       port = 1433

       tds version = 8.0

       client charset = UTF-8

 

注意:

client charset,用戶端軟體可識別的字元集,必需大於或等於服務端資料庫使用的字元集.

由於 UTF-8 是所由字元集的超集,因此設定為 UTF-8 總是可行的.此外, FreeTDS的client charset不能設定為 UTF16.

 

3.3 修改/etc/odbc.ini (如果odbc是從源碼安裝,則 /usr/local/etc/odbc.ini)

 

在/etc/odbc.ini中添加如下內容:

[ODBC Data Sources]
TEST1dsn= My first Test DSN
TEST2dsn= My second Test DSN

 

[TEST1dsn] ; DSN 名
Driver = /usr/local/lib/libtdsodbc.so
Description = My First Test DSN
Trace = No
Servername = MYSQLSERVER ;在 freetds.conf中定義
Database = MYTESTDB ;庫名

 

[TEST2dsn]
Driver = /usr/local/lib/libtdsodbc.so
Description = My Second Test DSN
Trace = No
Server = 192.168.3.211 ; 可以直接寫資料庫伺服器的訪問資訊
Database = dave
Port = 1433
TDS_Version = 8.0

 

[Default]
Driver = /usr/local/freetds/lib/libtdsodbc.so

 

注意:

用 unixODBC 通過 freeTDS 訪問 MS SQL Server 有兩種配置方式.

(1)將伺服器資訊寫在 freeTDS 的設定檔 $PREFIX/etc/freetds.conf 中,而 /etc/odbc.ini 中使用 Servername 來指向 freetds.conf 中設定的 DSN.
如上例中的[TEST1dsn]

(2)將伺服器資訊也一併寫在 /etc/odbc.ini 中. 如上例中的 [TEST2dsn].

注意,關鍵字有所不同.例如, freetds.conf 中的 tds version 在 /etc/odbc.ini 中為TDS_Version.

 

方式(2)相對簡單,但只有少數幾個關鍵字可以控制freetds,至於freetds的其它特徵則使用freetds的預設配置.

方式(1)雖然複雜一些,但對freetds可進行更細緻的控制,例如可指定用戶端的字元集. 推薦使用方式(1)進行配置.

 

四.測試

無論是用用戶端軟體,還是編程訪問資料庫,通常要提供三個參數:DSN, UserName, Password.

以本文樣本來說,
DSN = TEST1dsn 或 TEST2dsn
UserName = somename,
Password = somepasswd,

 

就意味著訪問位於 192.168.3.211 的 MS SQL Server 庫 dave. 查詢結果的字元集為UTF-8.

unixODBC 提供的一個通用的 GUI 資料庫連接用戶端為 DataManager.

 

--測試DSN2

[root@rac1 freetds-0.91RC2]# isql -v TEST2dsndave dave

+---------------------------------------+

| Connected!                            |

|                                       |

| sql-statement                         |

| help [tablename]                      |

| quit                                  |

|                                       |

+---------------------------------------+

SQL> select * from dave;

+------------+-----------+

| id        | name      |

+------------+-----------+

| 1         | 1         |

| 1         | 1         |

| 1         | 1         |

| 1         | 1         |

| 1         | 1         |

| 1         | 1         |

| 1         | 1         |

| 1         | 1         |

| 1         | 1         |

| 1         | 1         |

| 1         | 1         |

| 1         | 1         |

| 2         | 2         |

+------------+-----------+

SQLRowCount returns 13

13 rows fetched

SQL>

 

--測試DSN1

[root@rac1 freetds-0.91RC2]# isql -vTEST1dsn  dave  dave

+---------------------------------------+

| Connected!                            |

|                                       |

| sql-statement                         |

| help [tablename]                      |

| quit                                  |

|                                       |

+---------------------------------------+

 

 

五.關於字元集:

FreeTDS能夠自動識別伺服器端的charset. 因此 FreeTDS 需要使用者設定用戶端的charset. 這也就是用戶端應用程式期待從FreeTDS獲得的資料所應該使用的charset.

一旦client charset設定, FreeTDS將實現從 server charset <--> client charset的轉換.

如果有兩個客戶應用程式都要訪問同一個 MS SQLServer, 但很不幸,這兩個客戶程式所接受的字元集分別是 UTF-8 和 GB2312. 那麼解決的辦法是在FreeTDS.conf中設定兩組DataSource,它們的伺服器設定相同,但clientcharset分別設為 UTF-8和GB2312. 在 odbc.ini中也設定兩組不同的DSN 分別指向這兩組DataSource. 而最終兩個客戶程式各自使用與之相應的DSN即可.

 

 

整理自:

http://www.humin.com.cn/linux-unixodbc-freetds-ms-sql-server.html

 

 PS: 

使用這種方法可以解決RStudio 的中文亂碼問題,如果直接在windows下使用RStudio,那麼中文顯示的是亂碼,而使用Linux 下的RStudio Server + unixODBC,就可以解決中文亂碼問題了。

 

 

 

 

 

-------------------------------------------------------------------------------------------------------

著作權,文章允許轉載,但必須以連結方式註明源地址,否則追究法律責任!

Skype: tianlesoftware

Email:   tianlesoftware@gmail.com

Blog:     http://www.tianlesoftware.com

Weibo: http://weibo.com/tianlesoftware

Twitter: http://twitter.com/tianlesoftware

Facebook: http://www.facebook.com/tianlesoftware

Linkedin: http://cn.linkedin.com/in/tianlesoftware

 

 

-------加群需要在備忘說明Oracle資料表空間和資料檔案的關係,否則拒絕申請----

DBA1 群:62697716(滿);   DBA2 群:62697977(滿)  DBA3 群:62697850(滿)  

DBA 超級群:63306533(滿);  DBA4 群:83829929   DBA5群: 142216823

DBA6 群:158654907    DBA7 群:172855474   DBA總群:104207940

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.