GBase 8a ODBC 常见问题如下:
支持动态游标
GBase 8a ODBC 8.3 除了支持只向前和静态游标类型还支持动态游标类型。由于性能问题,驱动程序缺省是不支持这个特征。用户可以通过指明连接选项标识 DYNAMIC_CURSOR=1 或从 DSN 配置中选中使用动态游标选项来使用这个特征。
使用 unixODBC 访问 GBase 数据库时出现段错误
这是 unixODBC 的问题,通过在/etc/odbcinst.ini 文件中增加DontDLClose=1 关键字可以解决该问题。
多线程使用 unixODBC 访问 GBase 数据库的配置
在多线程调用 unixODBC 访问 GBase 数据库时,可以在/etc/odbcinst.ini文件中增加 threading=0 来提高并发。
python 语言调用 GBase 8a ODBC 驱动
使用 python 语言调用 GBase 8a ODBC 时,需要在下载安装 python 和 pyodbc包。以 python2.7 为例
1, 从 http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tgz 下载 python2.7 的源码包。
2, 从 http://pyodbc.googlecode.com/files/pyodbc-3.0.6.zip 下载pyodbc-3.0.6 的安装包。
3, 安装 python2.7,先解压 Python-2.7.3.tgz,然后执行如下命令:
./configure --prefix=/opt/python2.7
make
make install
4, 安装 pyodbc-3.0.6,先解压 pyodbc-3.0.6.zip,然后执行如下命令:
/opt/python2.7/bin/python setup.py build install
这样 python2.7 和 pyodbc-3.0.6 就安装成功。可以进行 python 控制台进行验证,如下所示:
[root@GBase pyodbc-3.0.6]# /opt/python2.7/bin/python
Python 2.7.3 (default, Jul 16 2012, 18:45:35)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyodbc
>>>
使用 import pyodbc 引用 pyodbc 时没有报错,说明 python 安装成功。
接下来是创建 ODBC 数据源,创建 ODBC 数据源的方法请参考 3.2.2。如果涉及到中文,那么一定要设置 GBase 8a ODBC 驱动的字符集(该字符集需要与集群安装时默认的字符集保持一致)。
perl 语言调用 GBase 8a ODBC 驱动
使用 python 语言调用 GBase 8a ODBC 时,需要在下载安装 perl 和 DBD::ODBC包。以 perl-5.14 为例:
1, 从http://downloads.activestate.com/ActivePerl/releases/5.14.2.1402/Act ivePerl5.14.2.1402-x86_64-linux-glibc-2.3.5-295342.tar.gz 下载 perl-5.14的安装包。
2, 从http://mirrors.sohu.com/CPAN/authors/id/M/MJ/MJEVANS/DBD-ODBC-1.39.t ar.gz 下载 DBD-ODBC-1.39。
3, 安装 perl-5.14。perl 默认安装在/opt/ActivePerl-5.14 目录下。
4, 安装 DBD-ODBC-1.39,先解压 DBD-ODBC-1.39.tar.gz,然后执行如下命令安装:
/opt/ActivePerl-5.14/bin/perl Makefile.PL
make
make install
5, 接下来是创建 ODBC 数据源,创建 ODBC 数据源的方法请参考 3.2.2。如果涉及到中文,那么一定要设置 GBase 8a ODBC 驱动的字符集(该字符集需要与集群安装时默认的字符集保持一致)。此用例中 GBase 8a ODBC 字符集设置为UTF8。
php 语言调用 GBase 8a ODBC 驱动
GBase ODBC 驱动重复执行能够返回结果的SQL 问题
如果应用像如下示例调用 ODBC 接口,那么 GBase ODBC 会在执行SQLNumResultCols 时先在 Server 端执行一次 selectSql,然后在执行SQLExecute 在 Server 端再执行一次 selectSql。
调用 SQLBindCol 时报错 Invalid descriptor index
正常情况下传给 SQLBindCol 的第二个参数 ColumnNumber 为 0 或者大于结果集的列数时会报 Invalid descriptor index 错误。
当传入的 ColumnNumber 参数正确时,由于某种原因 gclusterd 主动 断开了连接,也会导致 SQLBindCol 报错 Invalid descriptor index。比如当结果集比较大时,ODBC 客户端应用不能及时从 ODBC 读取结果集,导致 gclusterd 向ODBC 发送数据时写超时。这种情况在 gclusterd 的参数"gcluster_send_client_data_timeout"默认值 30 时比较常见。这时需要修改该参数值为一个较 大值或者直接修改为 0。
特殊场景下屏蔽 ODBC 负载均衡方式
GBase 8a Cluster ODBC_8.4_build2.0 支持屏蔽 ODBC 负载均衡,使用环境变量 GSODBC_USE_BALANCE 来控制 gsodbc 驱动是否使用 balance 后台检测。




