Linux 下的 ODBC 包
从发布包中获取,包名为 openGauss-*.*.0-ODBC.tar.gz。Linux 环境下,开发应用程序要用到 unixODBC 提供的头文件(sql.h、sqlext.h 等)和库 libodbc.so。这些头文件和库可从 unixODBC-2.3.0 的安装包中获得。
配置数据源
将 openGauss 提供的 ODBC DRIVER(psqlodbcw.so)配置到数据源中便可使用。配置数据源需要配置 “odbc.ini” 和 “odbcinst.ini” 两个文件(在编译安装 unixODBC 过程中生成且默认放在 “/usr/local/etc” 目录下),并在服务器端进行配置。
-  获取 unixODBC-2.3.9 源码包。 获取参考地址:http://www.unixodbc.org/download.html 
-  安装 unixODBC。如果机器上已经安装了其他版本的 unixODBC,可以直接覆盖安装。 目前不支持 unixODBC-2.2.1 版本。以 unixODBC-2.3.0 版本为例,在客户端执行如下命令安装 unixODBC。默认安装到 “/usr/local” 目录下,生成数据源文件到 “/usr/local/etc” 目录下,库文件生成在 “/usr/local/lib” 目录。 tar zxvf unixODBC-2.3.9.tar.gz cd unixODBC-2.3.9 #修改configure文件(如果不存在,那么请修改configure.ac),找到LIB_VERSION #将它的值修改为"1:0:0",这样将编译出*.so.1的动态库,与psqlodbcw.so的依赖关系相同。 vim configure./configure --enable-gui=no #如果要在ARM服务器上编译,请追加一个configure参数: --build=aarch64-unknown-linux-gnu make #安装可能需要root权限 make install
-  替换客户端 openGauss 驱动程序。 - 将 openGauss-x.x.x-ODBC.tar.gz 解压到 “/usr/local/lib” 目录下。解压会得到 “psqlodbcw.la” 和 “psqlodbcw.so” 两个文件。
- 将 openGauss-x.x.x-ODBC.tar.gz 解压后 lib 目录中的库拷贝到 “/usr/local/lib” 目录下。
 
-  配置数据源。 -  配置 ODBC 驱动文件。 在 “/xxx/odbc/etc/odbcinst.ini” 文件中追加以下内容。 [GaussMPP] Driver64=/xxx/odbc/lib/psqlodbcw.so setup=/xxx/odbc/lib/psqlodbcw.soodbcinst.ini 文件中的配置参数说明如表 2 所示。 表 2 odbcinst.ini 文件配置参数 参数 描述 示例 [DriverName] 驱动器名称,对应数据源 DSN 中的驱动名。 [DRIVER_N] Driver64 驱动动态库的路径。 Driver64=/xxx/odbc/lib/psqlodbcw.so setup 驱动安装路径,与 Driver64 中动态库的路径一致。 setup=/xxx/odbc/lib/psqlodbcw.so 
-  配置数据源文件。 在 “/usr/local/etc/odbc.ini” 文件中追加以下内容。 [MPPODBC] Driver=GaussMPP Servername=10.145.130.26(数据库Server IP) Database=postgres (数据库名) Username=omm (数据库用户名) Password= (数据库用户密码) Port=8000 (数据库侦听端口) Sslmode=allowodbc.ini 文件配置参数说明如表 3 所示。 表 3 odbc.ini 文件配置参数 参数 描述 示例 [DSN] 数据源的名称。 [MPPODBC] Driver 驱动名,对应 odbcinst.ini 中的 DriverName。 Driver=DRIVER_N Servername 服务器的 IP 地址。 Servername=10.145.130.26 Database 要连接的数据库的名称。 Database=postgres Username 数据库用户名称。 Username=omm Password 数据库用户密码。 Password= 说明:ODBC 驱动本身已经对内存密码进行过清理,以保证用户密码在连接后不会再在内存中保留。 但是如果配置了此参数,由于 UnixODBC 对数据源文件等进行缓存,可能导致密码长期保留在内存中。 推荐在应用程序连接时,将密码传递给相应 API,而非写在数据源配置文件中。同时连接成功后,应当及时清理保存密码的内存段。 Port 服务器的端口号。 Port=8000 Sslmode 开启 SSL 模式 Sslmode=allow Debug 设置为 1 时,将会打印 psqlodbc 驱动的 mylog,日志生成目录为 /tmp/。设置为 0 时则不会生成。 Debug=1 UseServerSidePrepare 是否开启数据库端扩展查询协议。 可选值 0 或 1,默认为 1,表示打开扩展查询协议。 UseServerSidePrepare=1 UseBatchProtocol 是否开启批量查询协议(打开可提高 DML 性能);可选值 0 或者 1,默认为 1。 当此值为 0 时,不使用批量查询协议(主要用于与早期数据库版本通信兼容)。 当此值为 1,并且数据库 support_batch_bind 参数存在且为 on 时,将打开批量查询协议。 UseBatchProtocol=1 ForExtensionConnector 这个开关控制着 savepoint 是否发送,savepoint 相关问题可以注意这个开关。 ForExtensionConnector=1 UnamedPrepStmtThreshold 每次调用 SQLFreeHandle 释放 Stmt 时,ODBC 都会向 server 端发送一个 Deallocate plan_name 语句,业务中存在大量这类语句。为了减少这类语句的发送,我们将 stmt->plan_name 置空,从而使得数据库识别这个为 unamed stmt。增加这个参数对 unamed stmt 的阈值进行控制。 UnamedPrepStmtThreshold=100 ConnectionExtraInfo GUC 参数 connection_info 中显示驱动部署路径和进程属主用户的开关。 ConnectionExtraInfo=1 说明:默认值为 0。当设置为 1 时,ODBC 驱动会将当前驱动的部署路径、进程属主用户上报到数据库中,记录在 connection_info 参数里;同时可以在 PG_STAT_ACTIVITY 中查询到。 BoolAsChar 设置为 Yes 是,Bools 值将会映射为 SQL_CHAR。如不设置将会映射为 SQL_BIT。 BoolsAsChar = Yes RowVersioning 当尝试更新一行数据时,设置为 Yes 会允许应用检测数据有没有被其他用户进行修改。 RowVersioning=Yes ShowSystemTables 驱动将会默认系统表格为普通 SQL 表格。 ShowSystemTables=Yes 其中关于 Sslmode 的选项的允许值,具体信息见下表: 表 4 Sslmode 的可选项及其描述 Sslmode 是否会启用 SSL 加密 描述 disable 否 不使用 SSL 安全连接。 allow 可能 如果数据库服务器要求使用,则可以使用 SSL 安全加密连接,但不验证数据库服务器的真实性。 prefer 可能 如果数据库支持,那么建议使用 SSL 安全加密连接,但不验证数据库服务器的真实性。 require 是 必须使用 SSL 安全连接,但是只做了数据加密,而并不验证数据库服务器的真实性。 verify-ca 是 必须使用 SSL 安全连接,并且验证数据库是否具有可信证书机构签发的证书。 verify-full 是 必须使用 SSL 安全连接,在 verify-ca 的验证范围之外,同时验证数据库所在主机的主机名是否与证书内容一致。openGauss 不支持此模式。  说明: SSL 模式: 保证 client.key * 系列文件为 600 权限: 退回根目录,创建.postgresql 目录,并将 root.crt,client.crt,client.key,client.key.cipher,client.key.rand,client.req,server.crt,server.key,server.key.cipher,server.key.rand,server.req 放在此路径下。 Unix 系统下,server.crt、server.key 的权限设置必须禁止任何外部或组的访问,请执行如下命令实现这一点。 chmod 0600 server.key将 root.crt 以及 server 开头的证书相关文件全部拷贝进数据库 install/data 目录下(与 postgresql.conf 文件在同一路径)。 修改 postgresql.conf 文件: ssl = on ssl_cert_file = 'server.crt' ssl_key_file = 'server.key' ssl_ca_file = 'root.crt'修改完参数后需重启数据库。 修改配置文件 odbc.ini 中的 sslmode 参数(require 或 verify-ca)。 
 
-  
-  配置数据库服务器。 -  以操作系统用户 omm 登录数据库主节点。 
-  执行如下命令增加对外提供服务的网卡 IP 或者主机名(英文逗号分隔),其中 NodeName 为当前节点名称: gs_guc reload -N NodeName -I all -c "listen_addresses='localhost,192.168.0.100,10.11.12.13'"在 DR(Direct Routing,LVS 的直接路由 DR 模式)模式中需要将虚拟 IP 地址(10.11.12.13)加入到服务器的侦听地址列表中。 listen_addresses 也可以配置为 “*” 或 “0.0.0.0”,此配置下将侦听所有网卡,但存在安全风险,不推荐用户使用,推荐用户按照需要配置 IP 或者主机名,打开侦听。 
-  执行如下命令在数据库主节点配置文件中增加一条认证规则。(这里假设客户端 IP 地址为 10.11.12.13,即远程连接的机器的 IP 地址) gs_guc reload -N all -I all -h "host all jack 10.11.12.13/32 sha256" 说明: - -N all 表示 openGauss 中的所有主机。
- -I all 表示主机中的所有实例。
- -h 表示指定需要在 “pg_hba.conf” 增加的语句。
- all 表示允许客户端连接到任意的数据库。
- jack 表示连接数据库的用户。
- 10.11.12.13/_32_表示只允许 IP 地址为 10.11.12.13 的主机连接。在使用过程中,请根据用户的网络进行配置修改。32 表示子网掩码为 1 的位数,即 255.255.255.255。
- sha256 表示连接时 jack 用户的密码使用 sha256 算法加密。
 如果将 ODBC 客户端配置在和要连接的数据库主节点在同一台机器上,则可使用 local trust 认证方式,如下: local all all trust如果将 ODBC 客户端配置在和要连接的数据库主节点在不同机器上,则需要使用 sha256 认证方式,如下: host all all xxx.xxx.xxx.xxx/32 sha256
-  重启 openGauss。 gs_om -t stop gs_om -t start
 
-  
-  在客户端配置环境变量。 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