更新时间:2024-05-14 GMT+08:00

使用ODBC连接数据库

ODBC(Open Database Connectivity,开放数据库互连)是由Microsoft公司基于X/OPEN CLI提出的用于访问数据库的应用程序编程接口。应用程序通过ODBC提供的API与数据库进行交互,在避免了应用程序直接操作数据库系统的同时,增强了应用程序的可移植性、扩展性和可维护性。

ODBC的系统结构参见图1 ODBC系统结构

图1 ODBC系统结构

GaussDB目前在以下环境中提供对ODBC3.5的支持。

表1 ODBC支持平台

操作系统

平台

EulerOS V2.0SP5

x86_64位

EulerOS V2.0SP9

ARM64位

EulerOS V2.0SP10

x86_64位

EulerOS V2.0SP10

ARM64位

Windows 7

x86_32位

Windows 7

x86_64位

Windows Server 2008

x86_32位

Windows Server 2008

x86_64位

Kylin V10

x86_64位

Kylin V10

ARM64位

UnionTech V20

x86_64位

UnionTech V20

ARM64位

Huawei Cloud EulerOS 2.0

x86_64位

Huawei Cloud EulerOS 2.0

ARM64位

UNIX/Linux系统下的驱动程序管理器主要有unixODBC和iODBC,在这选择驱动管理器unixODBC-2.3.7作为连接数据库的组件。

Windows系统自带ODBC驱动程序管理器,在控制面板->管理工具中可以找到数据源(ODBC)选项。

当前数据库ODBC驱动基于开源版本,对于华为自研的数据类型,tinyint、smalldatetime、nvarchar2在获取数据类型的时候,可能会出现不兼容的情况。

ODBC相关约束说明

  • ODBC不支持容灾切换。
  • 当数据库开启proc_outparam_override参数时,ODBC无法正常调用带有out参数的存储过程。

前提条件

已下载Linux版本的ODBC驱动包和Windows版本的ODBC驱动包。
  • Linux版本包名为GaussDB-Kernel_数据库版本号_操作系统版本号_64bit_Odbc.tar.gz。Linux环境下,开发应用程序要用到unixODBC提供的头文件(sql.h、sqlext.h等)和库libodbc.so。这些头文件和库可从unixODBC-2.3.7的安装包中获得。
  • Windows版本包名为GaussDB-Kernel_数据库版本号_Windows_Odbc_X64.tar.gz(64位)。Windows环境下,开发应用程序用到的相关头文件和库文件都由系统自带。

在Linux下使用ODBC连接数据库

  1. 获取unixODBC源码包。

    获取参考地址:https://www.unixodbc.org/unixODBC-2.3.7.tar.gz

    下载后请先按照社区提供的完整性校验算法进行完整性校验。下载https://www.unixodbc.org/unixODBC-2.3.7.tar.gz.md5,查看MD5值,对比MD5值是否与源码包一致。

  2. 安装unixODBC。如果机器上已经安装了其他版本的unixODBC,可以直接覆盖安装。

    以unixODBC-2.3.7版本为例,在客户端执行如下命令安装unixODBC。
    tar zxvf unixODBC-2.3.7.tar.gz
    cd unixODBC-2.3.7
    
    ./configure --enable-gui=no #如果要在ARM服务器上编译,请追加一个configure参数: --build=aarch64-unknown-linux-gnu 
    make
    #安装可能需要root权限
    make install
    • 目前不支持unixODBC-2.2.1版本。
    • 默认安装到“/usr/local”目录下,生成数据源文件到“/usr/local/etc”目录下,库文件生成在“/usr/local/lib”目录。
    • 通过编译带有--enable-fastvalidate=yes选项的unixODBC来获得更高性能。但此选项可能会导致向ODBC API传递无效句柄的应用程序发生故障,而不是返回SQL_INVALID_HANDLE错误。

  3. 替换客户端GaussDB驱动程序。

    将GaussDB-Kernel_数据库版本号_操作系统版本号_64bit_Odbc.tar.gz解压。解压后会得到两个文件夹:lib与odbc,在odbc文件夹中还会有一个lib文件夹。将解压后得到的/lib文件夹与/odbc/lib文件夹中的所有动态库都复制到“/usr/local/lib”目录下。

  4. 配置数据源。

    1. 配置ODBC驱动文件。

      在“/usr/local/etc/odbcinst.ini”文件中追加以下内容。

      [GaussMPP]
      Driver64=/usr/local/lib/gsqlodbcw.so
      setup=/usr/local/lib/gsqlodbcw.so

      odbcinst.ini文件中的配置参数说明如表2所示。

      表2 odbcinst.ini文件配置参数

      参数

      描述

      示例

      [DriverName]

      驱动器名称,对应数据源DSN中的驱动名。

      [DRIVER_N]

      Driver64

      驱动动态库的路径。

      Driver64=/usr/local/lib/gsqlodbcw.so

      setup

      驱动安装路径,与Driver64中动态库的路径一致。

      setup=/usr/local/lib/gsqlodbcw.so

    2. 配置数据源文件。

      在“/usr/local/etc/odbc.ini ”文件中追加以下内容。

      [gaussdb]
      Driver=GaussMPP
      Servername=127.0.0.1 #数据库Server IP
      Database=db1 # 数据库名
      Username=omm  #数据库用户名
      Password=  #数据库用户密码
      Port=8000 #数据库侦听端口
      Sslmode=allow

      odbc.ini文件配置参数说明如表4 odbc.ini文件配置参数所示。

      表3 odbc.ini文件配置参数

      参数

      描述

      示例

      [DSN]

      数据源的名称。

      [gaussdb]

      Driver

      驱动名,对应odbcinst.ini中的DriverName。

      Driver=DRIVER_N

      Servername

      服务器的IP地址。可配置多个IP地址。支持IPv4和IPv6。

      Servername=127.0.0.1

      Database

      要连接的数据库的名称。

      Database=db1

      Username

      数据库用户名称。

      Username=omm

      Password

      数据库用户密码。

      说明:

      ODBC驱动本身已经对内存密码进行过清理,以保证用户密码在连接后不会再在内存中保留。

      但是如果配置了此参数,由于UnixODBC对数据源文件等进行缓存,可能导致密码长期保留在内存中。

      推荐在应用程序连接时,将密码传递给相应API,而非写在数据源配置文件中。同时连接成功后,应当及时清理保存密码的内存段。

      注意:

      配置文件中填写密码时,需要遵循http规则:

      1. 字符应当采用URL编码规范,如"!"应写作"%21","%"应写作"%25",因此应当特别注意字符。
      2. "+"会被替换为空格" "。

      Password=********

      Port

      服务器的端口号。当开启负载均衡时,可配置多个端口号,且需与配置的多IP一一对应。如果开启负载均衡配置多个IP时,仍只配置一个端口号,则默认所有IP共有同一个端口号,即为配置的端口号。

      Port=8000

      Sslmode

      开启SSL模式

      Sslmode=allow

      其中关于Sslmode的选项的允许值,具体信息如表3 sslmode的可选项及其描述所示。

      表4 sslmode的可选项及其描述

      sslmode

      是否会启用SSL加密

      描述

      disable

      不使用SSL安全连接。

      allow

      可能

      如果数据库服务器要求使用,则可以使用SSL安全加密连接,但不验证数据库服务器的真实性。

      prefer

      可能

      如果数据库支持,那么首选使用SSL安全加密连接,但不验证数据库服务器的真实性。

      require

      必须使用SSL安全连接,但是只做了数据加密,并不验证数据库服务器的真实性。

      verify-ca

      必须使用SSL安全连接,并且验证数据库是否具有可信证书机构签发的证书。

      verify-full

      必须使用SSL安全连接,在verify-ca的验证范围之外,同时验证数据库所在主机的主机名是否与证书内容一致。如果不一致,需要使用root用户修改/etc/hosts文件,将连接数据库节点的IP地址和主机名加入。

      说明:

      此模式不支持产品默认证书,生成证书请联系管理员处理

  5. SSL模式。具体操作请联系数据库管理员。
  6. 配置数据库服务器。具体操作请联系数据库管理员。
  7. 在客户端配置环境变量。

    vim ~/.bashrc

    在配置文件中追加以下内容。

    export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH
    export ODBCSYSINI=/usr/local/etc
    export ODBCINI=/usr/local/etc/odbc.ini

  8. 执行如下命令使设置生效。

    source ~/.bashrc

  9. 执行以下命令,开始连接数据库。

    isql -v GaussODBC

    GaussODBC为数据源名称
    • 如果显示如下信息,表明配置正确,连接成功。
      +---------------------------------------+
      | Connected!                            |
      |                                       |
      | sql-statement                         |
      | help [tablename]                      |
      | quit                                  |
      |                                       |
      +---------------------------------------+
    • 若显示ERROR信息,则表明配置错误。请检查上述配置是否正确。
    • 若是集群环境,需要在所有机器上都复制配置一份unixODBC。

在Windows下使用ODBC连接数据库

Windows操作系统自带ODBC数据源管理器,无需用户手动安装管理器便可直接进行配置。

  1. 替换客户端GaussDB驱动程序。

    根据需要,将包名为GaussDB-Kernel_数据库版本号_Windows_X64_Odbc.tar.gz的64位驱动或包名为GaussDB-Kernel_数据库版本号_Windows_X86_Odbc.tar.gz的32位驱动解压后,单击gsqlodbc.exe进行驱动安装。

  2. 打开驱动管理器。

    在配置数据源时,请使用ODBC版本对应的ODBC驱动管理器(如果使用64位ODBC驱动,必须要使用64位的ODBC驱动管理器,假设操作系统安装盘符为C盘,如果是其他盘符,请对路径做相应修改)。

    • 如果需要在64位操作系统使用32位ODBC驱动请使用:C:\Windows\SysWOW64\odbcad32.exe,请勿直接使用“控制面板 > 管理工具 > 数据源(ODBC)”。

      WOW64的全称是"Windows 32-bit on Windows 64-bit",C:\Windows\SysWOW64\存放的是64位系统上的32位运行环境。而C:\Windows\System32\存放的是与操作系统一致的运行环境,具体的技术信息请查阅Windows的相关技术文档。

    • 32位操作系统请使用:C:\Windows\System32\odbcad32.exe,或者单击“计算机 > 控制面板 > 管理工具 > 数据源(ODBC)”打开驱动管理器。
    • 64位操作系统请使用:控制面板 > 管理工具 > 数据源(ODBC) 打开驱动管理。

  3. 配置数据源。

    在打开的驱动管理器上,选择“用户DSN > 添加 > GaussDB Unicode”,然后进行配置:

    参数说明参考在Linux下使用ODBC连接数据库文件参数配置。

    其中单击Datasource可以选择配置是否打印日志:

    此界面上配置的用户名及密码信息,将会被记录在Windows注册表中,再次连接数据库时不再需要输入认证信息。但是出于安全考虑,建议在单击"Save"按钮保存配置信息前,清空相关敏感信息,在使用ODBC的连接API时,再传入所需的用户名、密码信息。

  4. SSL模式。

    3中的设置窗口的“SSL Mode”选项调整至“require”。

    表5 sslmode的可选项及其描述

    sslmode

    是否会启用SSL加密

    描述

    disable

    不使用SSL安全连接。

    allow

    可能

    如果数据库服务器要求使用,则可以使用SSL安全加密连接,但不验证数据库服务器的真实性。

    prefer

    可能

    如果数据库支持,那么首选使用SSL安全加密连接,但不验证数据库服务器的真实性。

    require

    必须使用SSL安全连接,但是只做了数据加密,并不验证数据库服务器的真实性。

    verify-ca

    必须使用SSL安全连接,并且验证数据库是否具有可信证书机构签发的证书。当前windows ODBC不支持cert方式认证。

    verify-full

    必须使用SSL安全连接,在verify-ca的验证范围之外,同时验证数据库所在主机的主机名是否与证书内容一致。当前windows ODBC不支持cert方式认证。

  5. 配置GaussDB服务器。具体操作请联系管理员。
  6. 执行如下命令重启集群。

    gs_om -t stop
    gs_om -t start

  7. 单击Test进行测试连接。

    • 如果显示如下,则表明配置正确,连接成功。

    • 若显示ERROR信息,则表明配置错误。请检查上述配置是否正确。