centos:使用unixODBC 连接sqlserver2008

待我称王封你为后i 2022-02-14 01:01 1059阅读 0赞
  1. # cat /etc/os-release
  2. NAME="CentOS Linux"
  3. VERSION="7 (Core)"
  4. ID="centos"
  5. ID_LIKE="rhel fedora"
  6. VERSION_ID="7"
  7. PRETTY_NAME="CentOS Linux 7 (Core)"
  8. ANSI_COLOR="0;31"
  9. CPE_NAME="cpe:/o:centos:centos:7"
  10. HOME_URL="https://www.centos.org/"
  11. BUG_REPORT_URL="https://bugs.centos.org/"
  12. CENTOS_MANTISBT_PROJECT="CentOS-7"
  13. CENTOS_MANTISBT_PROJECT_VERSION="7"
  14. REDHAT_SUPPORT_PRODUCT="centos"
  15. REDHAT_SUPPORT_PRODUCT_VERSION="7"

背景

背景:需要在linux下使用golang连接sqlserver2008,出现错误解决[unixODBC][Driver Manager]Data source name not found, and no default driver specified问题。然后我yum安装了unixODBC,但是还是出现了不知名的错误。所以决定把整个过程记录下来。
获取依赖:

  • 确保网络能够ping通

    $ go get -u github.com/gpmgo/gopm //加快下载包的速度
    $ go get -u github.com/lunny/godbc
    src/github.com/lunny/godbc/api/api_unix.go:13:18: fatal error: sql.h: No such file or directory
    // #include

    1. ^

    compilation terminated.

在这里插入图片描述

文章目录

  • 背景
  • 1、unixODBC
    • 简介
    • 原理
    • 安装
      • 1、源码安装
      • 2、二进制安装
      • 3、rmp安装
      • 3、查看
  • 2、freedsTDS
    • 连接mssql
      • 直接连接
      • 配置连接
    • 错误:configure: error: sql.h not found
  • 3、连接mssql
      • 配置
      • 连接
      • 理论
        • 两种ini文件
        • 配置文件路径
        • 配置文件内容
          • /etc/odbcinst.ini
          • odbc.ini

1、unixODBC

简介

ODBC(Open Database Connect)是由Microsoft 公司于1991 年提出的一个开放的,用于访问数据库的统一接口规范。unixODBC的是为非Window平台的系统实现ODBC规范接口的中间件。

unixODBC 提供了Linux 对ODBC 的支持,但它只是一个 ODBC的管理器, 要连接实际的数据库还得提供这种数据库的 ODBC 驱动.

FreeTDS就是Linux 下 用于连接MS SQL Server 和 Sybase 的免费ODBC 驱动
注意, 必须先装 unixODBC, 再装 freetds

原理

在这里插入图片描述
专有名词:

  • 数据源:是ODBC与数据库之间建立连接的依据,包括数据源名称、数据源描述,数据库驱动程序、数据库服务器地址、数据库端口号、数据库名称等。
  • ODBC驱动程序:ODBC与数据库之间的接口
  • 驱动程序管理器:将应用程序对ODBC API的调用传递给正确的驱动程序,而驱动程序执行完操作之后得到结果返回给应用程序。
  • ODBC API:应用程序与ODBC之间的接口
  • ODBC管理器:管理数据源、驱动程序
    用户通过ODBC管理器配置数据源,并获得数据源名称,应用程序提供数据源名称给ODBC,ODBC以此建立与相应数据库的连接

参考

安装

1、源码安装

先下载最新的unixODBC源码包(http://www.unixodbc.org )放到适合自己的目录下,比如:/usr/local,然后运行下述命令:

  1. # tar zxvf unixODBC-2.3.7.tar.gz
  2. # cd unixODBC-2.3.7/
  3. # ./configure --prefix=/usr/local/unixODBC-2.3.7 --includedir=/usr/include --libdir=/usr/local/lib -bindir=/usr/bin --sysconfdir=/usr/local/etc
  4. # make && make install​

安装成功后,unixODBC所需的头文件都被安装到了/usr/inlucde下,编译好的库文件安装到了/usr/local/lib 下,与unixODBC相关的可执行文件安装到了/usr/bin下,配置文件放到了/usr/local/etc下。

2、二进制安装

  1. $ yum install unixODBC unixODBC-devel

3、rmp安装

https://pkgs.org/download/unixODBC-devel
http://rpmfind.net/linux/rpm2html/search.php?query=unixODBC

  1. uname -r
  2. $ rpm -ivh unixODBC-devel-2.3.1-11.el7.x86_64.rpm

3、查看

查看是否安装成功

  1. ]# isql --version
  2. unixODBC 2.3.7
  • 查看安装位置

    which isql

    /usr/bin/isql

    isql


    • unixODBC - isql *

  • 查看版本和安装信息

    odbcinst -j

    unixODBC 2.3.7
    DRIVERS…………: /usr/local/etc/odbcinst.ini
    SYSTEM DATA SOURCES: /usr/local/etc/odbc.ini
    FILE DATA SOURCES..: /usr/local/etc/ODBCDataSources
    USER DATA SOURCES..: /root/.odbc.ini
    SQLULEN Size…….: 8
    SQLLEN Size……..: 8
    SQLSETPOSIROW Size.: 8

2、freedsTDS

freeTDS官网地址:http://www.freetds.org/
FreeTDS是Unix 和Linux library的一个集合,通过FreeTDS可以连接到MicrosoftSQL Server 和 Sybase DB

  • 安装

    当前为root权限

    $ cd freetds-1.1.5/

    查看当前支持的 tdsver 版本,选择对应支持的 MSSQL 版本

    $ ./configure —help
    —with-tdsver=VERSION TDS protocol version (5.0/7.1/7.2/7.3/7.4/auto)

    重编译安装,注意 tdsver 版本

    $ ./configure —prefix=/usr/local/freetds —with-unixodbc=/usr/local/unixODBC-2.3.7 —enable-msdblib —with-tdsver=7.3 [源码安装]
    $ make && make install

    —prefix=/usr/local/freetds FreeTDS的默认安装目录 /usr/local/freetds
    —enable-msdblib 允许 Microsoft 的函数库
    —with-tdsver=7.3 指定TDS的协议版本,不填写则默认5.0版,7.3支持MSSQL2008

    /usr/local/freetds/bin/tsql -C

连接mssql

直接连接

  1. /usr/local/freetds/bin/tsql -H 192.168.133.133 -p1433 -Usa -P123456 -Darguse

配置连接

  • 在 FreeTDS 的配置文件中添加指向具体数据库的访问信息
    修改/usr/local/etc/freetds.conf文件,添加如下内容:

    $ sudo gedit /usr/local/freetds/etc/freetds.conf
    [mssqlserver]

    1. host = 192.168.133.133
    2. port = 1433
    3. tds version = 7.3
    4. client charset = UTF-8

注意:
client charset,客户端软件可识别的字符集,必需大于或等于服务端数据库使用的字符集.

由于 UTF-8 是所由字符集的超集,因此设置为 UTF-8 总是可行的.此外, FreeTDS的client charset不能设置为 UTF16.

  • 连接:

    /usr/local/freetds/bin/tsql -Smssqlserver -U sa -P 123456

https://blog.csdn.net/zhizhengguan/article/details/89516455

错误:configure: error: sql.h not found

  • ./configure —prefix=/usr/local/freetds —with-unixodbc=/usr/local/unixODBC-2.3.7 —enable-msdblib —with-tdsver=7.3 时出现问题:configure: error: sql.h not found
  • 1、修改confure

    vim ./configure

    找到$with_unixodbc中的

    1. test -r "$ODBC_INC/sql.h" || as_fn_error $? "sql.h not found" "$LINENO" 5

    这段代码

    修改成

    1. test -r "$ODBC_INC/sql.h" || as_fn_error $? "$ODBC_INC/sql.h not found" "$LINENO" 5
  • 2、配置

    $ ./configure —prefix=/usr/local/freetds —with-unixodbc=/usr/local/unixODBC-2.3.7 —enable-msdblib —with-tdsver=7.3
    报错:configure: error: /usr/local/unixODBC-2.3.7/include/sql.h not found

  • 3、生成软链接

    ln -s /usr/local/unixODBC/include/sql.h /usr/local/unixODBC1/include/sql.h
    ln -s /usr/include/sqlext.h /usr/local/unixODBC-2.3.7/include/sqlext.h
    ln -s /usr/include/sqltypes.h /usr/local/unixODBC-2.3.7/include/sqltypes.h
    ln -s /usr/include/sqlucode.h /usr/local/unixODBC-2.3.7/include/sqlucode.h

  • 4、./configure —prefix=/usr/local/freetds —with-unixodbc=/usr/local/unixODBC-2.3.7 —enable-msdblib —with-tdsver=7.3

3、连接mssql

配置

  • 在/etc/odbcinst.ini (或者/usr/local/etc/odbcinst.ini) 中登记 FreeTDS 驱动

    $ cat /usr/local/etc/odbcinst.ini

    Driver from FreeTDS package

    setup from FreeTDS package

    [FreeTDS] # unixodbc驱动名称
    Description=ODBC of FreeTDS for MS SQL 2008 # 简介
    Driver=/usr/local/freetds/lib/libtdsodbc.so # 驱动所在位置

  • 在/usr/local/etc/odbc.ini中配置DNS [或者修改/etc/odbc.ini]

    [ODBC Data Sources]
    TEST2dsn= My second Test DSN
    TEST3dsn= testststtsts

    [TEST2dsn]
    Driver = /usr/local/freetds/lib/libtdsodbc.so
    Description = My Second Test DSN
    Trace = No
    Server = 192.168.133.133
    Database = master
    Port = 1433
    TDS_Version = 7.3

  1. [TEST3dsn]
  2. Driver = /usr/local/freetds/lib/libtdsodbc.so
  3. Description = My Second Test DSN
  4. Trace = No
  5. Server = 192.168.133.133
  6. Database = master
  7. Port = 1433
  8. TDS_Version = 7.3

连接

  1. isql -v TEST2dsn sa 123456
  2. +---------------------------------------+
  3. | Connected! |
  4. | |
  5. | sql-statement |
  6. | help [tablename] |
  7. | quit |
  8. | |
  9. +---------------------------------------+
  10. SQL>

理论

两种ini文件

ODBC会区分两种类型的ini文件。

系统ini文件能被所有用户访问,但是不能修改;用户ini文件则是针对特定用户的,并且能被该特定用户修改。

ODBC的系统文件是odbcinst.ini和odbc.ini。用户文件是~/.odbc.ini(注意开头.号),并包含在各自用户的home目录下。

系统文件odbcinst.ini包含对所有用户可访问的ODBC驱动信息;odbc.ini文件包含所有用户可访问的DSN信息。这些’系统DSN’对于如web服务器这样,不以真实用户身份运行的应用十分有用,因为这些程序不会有自己的home目录来存放.odbc.ini文件。

配置文件路径

odbcinst.ini和odbc.ini文件默认放在/usr/local/etc下面。但由于现在能通过指定配置脚本的prefix来指定文件路径,所以如果在configure的时候指定的了prefix,则文件路径在{prefix}/etc下面

配置文件内容

/etc/odbcinst.ini

备注:unixODBC先天支持PostgreSQL和MYSQL者两个驱动

  1. # cat odbc.ini
  2. [PostgreSQL]
  3. Description=ODBC for PostgreSQL
  4. Driver=/usr/lib/psqlodbcw.so
  5. Setup=/usr/lib/libodbcpsqlS.so
  6. Driver64=/usr/lib64/psqlodbcw.so
  7. Setup64=/usr/lib64/libodbcpsqlS.so
  8. FileUsage=1
  9. [MySQL]
  10. Description=ODBC for MySQL
  11. Driver=/usr/lib/libmyodbc5.so
  12. Setup=/usr/lib/libodbcmyS.so
  13. Driver64=/usr/lib64/libmyodbc5.so
  14. Setup64=/usr/lib64/libodbcmyS.so
  15. FileUsage=1

[PostgreSQL]是driver的名字,这里表明这是一个PostgreSQL driver。
Driver 和Setup路径指出ODBC driver和setup libs 的位置。
当我们使用ODBCConfig工具添加新的DSN时,会调用这个setup lib。但是由于现在我们是非GUI安装,所以其实可以不用管他。
Driver路径最为关键。当DSN调用SQLConnect或SQLDriverConnect时,driver manager会动态载入这些库。若这里指定到了错误的Driver,则DSN无法工作。
FileUsage由odbcinst 命令自己添加,所以如果你使用的是文本编辑器,则需要自己添加。
Threads
由于1.6版本之后添加了多线程支持,所以如果driver manager构建了多线程支持,则可以配置:

[PostgreSQL]
Description = PostgreSQL driver for Linux & Win32
Driver = /usr/local/lib/libodbcpsql.so
Setup = /usr/local/lib/libodbcpsqlS.so
Threading     = 2
这项配置改变了默认的线程序列化等级(thread serialization level).

odbc.ini

以上转载自:https://www.cnblogs.com/oDoraemon/p/5364271.html

参考:https://blog.csdn.net/foxgod/article/details/78748657
https://blog.csdn.net/qq\_25549309/article/details/51555789
https://www.cnblogs.com/zlja/archive/2012/03/06/2449470.html

参考:https://www.cnblogs.com/zlja/archive/2012/03/06/2449470.html
https://blog.csdn.net/zhizhengguan/article/details/88777732

发表评论

表情:
评论列表 (有 0 条评论,1059人围观)

还没有评论,来说两句吧...

相关阅读