设为首页 收藏本站
查看: 561|回复: 0

[经验分享] Linux 配置 unixODBC 访问 MS SQL Server 说明

[复制链接]

尚未签到

发表于 2016-3-14 08:59:05 | 显示全部楼层 |阅读模式
  
一.安装 unixODBC
  这个使用YUM安装一下,不多说:
  Linux 使用光盘搭建 本地 YUM 服务器
  http://blog.csdn.net/tianlesoftware/article/details/7302358
  
  [iyunv@rac1 mnt]#yum install unixODBC
  [iyunv@rac1 mnt]#yum install unixODBC-devel
  
  确认unixODBC的安装,使用isql命令,其是unixODBC自带的命令。可以使用这个命令验证unixODBC的配置。
  
  [iyunv@rac1 /]# isql --version
  unixODBC 2.2.14
  [iyunv@rac1 /]# which isql
  /usr/bin/isql
  [iyunv@rac1 /]# isql
  
  **********************************************
  * unixODBC - isql *
  **********************************************
  * Syntax *
  * *
  *isql DSN [UID [PWD]] [options]*
  * *
  * Options *
  * *
  * -bbatch.(no prompting etc) *
  * -dxdelimit columns with x *
  * -x0xXXdelimit columns with XX, where *
  *x is in hex, ie 0x09 is tab *
  * -wwrap results in an HTML table *
  * -ccolumn names on first row. *
  *(only used when -d) *
  * -mnlimit column display width to n *
  * -vverbose. *
  * -lxset locale to x *
  * -qwrap char fields in dquotes *
  * -3Use ODBC 3 calls *
  * -nUse new line processing *
  * --versionversion *
  * *
  * 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*
  **********************************************
  
  [iyunv@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:
  [iyunv@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: â&#8364;œfreetds-current.tgzâ&#8364;
  
  100%[==========================================================>]2,192,516 43.7K/s in 37s
  
  2012-03-06 10:15:21 (58.5 KB/s) -â&#8364;œfreetds-current.tgzâ&#8364; saved [2192516/2192516]
  
  
2.2 安装freeTDS:
  FreeTDS 的安装帮助,可以参考:
  unixODBC - MS SQL Server/PHP
  http://www.unixodbc.org/doc/FreeTDS.html
  
  [iyunv@rac1 ~]# tar xzf freetds-current.tgz
  
  --查看configure的帮助文档:
  [iyunv@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
  [iyunv@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
  [iyunv@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,就可以解决中文乱码问题了。
  

DSC0000.gif

  
  
  
  
  
  -------------------------------------------------------------------------------------------------------
  版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
  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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-190487-1-1.html 上篇帖子: Linux主机驱动与外设驱动分离思想 下篇帖子: 用busybox制作嵌入式Linux的文件系统
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表