使用ODBC连接数据库
ODBC(Open Database Connectivity,开放数据库互连)是由Microsoft公司基于X/OPEN CLI提出的用于访问数据库的应用程序编程接口。应用程序通过ODBC提供的API与数据库进行交互,在避免了应用程序直接操作数据库系统的同时,增强了应用程序的可移植性、扩展性和可维护性。
ODBC的系统结构参见图1 ODBC系统结构。
GaussDB目前在以下环境中提供对ODBC3.5的支持。
操作系统 |
平台 |
---|---|
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版本包名为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连接数据库
- 获取unixODBC源码包。
获取参考地址:https://www.unixodbc.org/unixODBC-2.3.7.tar.gz
下载后请先按照社区提供的完整性校验算法进行完整性校验。下载https://www.unixodbc.org/unixODBC-2.3.7.tar.gz.md5,查看MD5值,对比MD5值是否与源码包一致。
- 安装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错误。
- 替换客户端GaussDB驱动程序。
将GaussDB-Kernel_数据库版本号_操作系统版本号_64bit_Odbc.tar.gz解压。解压后会得到两个文件夹:lib与odbc,在odbc文件夹中还会有一个lib文件夹。将解压后得到的/lib文件夹与/odbc/lib文件夹中的所有动态库都复制到“/usr/local/lib”目录下。
- 配置数据源。
- 配置ODBC驱动文件。
在“/usr/local/etc/odbcinst.ini”文件中追加以下内容。
[GaussMPP] Driver64=/usr/local/lib/gsqlodbcw.so setup=/usr/local/lib/gsqlodbcw.so
odbcinst.ini文件中的配置参数说明如表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规则:
- 字符应当采用URL编码规范,如"!"应写作"%21","%"应写作"%25",因此应当特别注意字符。
- "+"会被替换为空格" "。
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地址和主机名加入。
说明:此模式不支持产品默认证书,生成证书请联系管理员处理。
- 配置ODBC驱动文件。
- SSL模式。具体操作请联系数据库管理员。
- 配置数据库服务器。具体操作请联系数据库管理员。
- 在客户端配置环境变量。
vim ~/.bashrc
在配置文件中追加以下内容。
export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH export ODBCSYSINI=/usr/local/etc export ODBCINI=/usr/local/etc/odbc.ini
- 执行如下命令使设置生效。
source ~/.bashrc
- 执行以下命令,开始连接数据库。
isql -v GaussODBC
GaussODBC为数据源名称- 如果显示如下信息,表明配置正确,连接成功。
+---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+
- 若显示ERROR信息,则表明配置错误。请检查上述配置是否正确。
- 若是集群环境,需要在所有机器上都复制配置一份unixODBC。
- 如果显示如下信息,表明配置正确,连接成功。
在Windows下使用ODBC连接数据库
Windows操作系统自带ODBC数据源管理器,无需用户手动安装管理器便可直接进行配置。
- 替换客户端GaussDB驱动程序。
根据需要,将包名为GaussDB-Kernel_数据库版本号_Windows_X64_Odbc.tar.gz的64位驱动或包名为GaussDB-Kernel_数据库版本号_Windows_X86_Odbc.tar.gz的32位驱动解压后,单击gsqlodbc.exe进行驱动安装。
- 打开驱动管理器。
在配置数据源时,请使用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) 打开驱动管理。
- 如果需要在64位操作系统使用32位ODBC驱动请使用:C:\Windows\SysWOW64\odbcad32.exe,请勿直接使用“控制面板 > 管理工具 > 数据源(ODBC)”。
- 配置数据源。
在打开的驱动管理器上,选择“用户DSN > 添加 > GaussDB Unicode”,然后进行配置:
参数说明参考在Linux下使用ODBC连接数据库文件参数配置。
其中单击Datasource可以选择配置是否打印日志:
此界面上配置的用户名及密码信息,将会被记录在Windows注册表中,再次连接数据库时不再需要输入认证信息。但是出于安全考虑,建议在单击"Save"按钮保存配置信息前,清空相关敏感信息,在使用ODBC的连接API时,再传入所需的用户名、密码信息。
- 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方式认证。
- 配置GaussDB服务器。具体操作请联系管理员。
- 执行如下命令重启集群。
gs_om -t stop gs_om -t start
- 单击Test进行测试连接。