ODBC API不能释放Oracle数据库连接
来源:互联网 发布:1415赛季nba总决赛数据 编辑:程序博客网 时间:2024/05/30 21:58
ODBC API打开数据库连接,一般用: SQLDriverConnect
关闭数据库连接用: SQLDisconnect
但是要精细控制,需要设置连接数据库HANDLE的属性,比如比较普通的有版本号,超时时间等等。
最近编程发现,用关闭数据库还不能释放。看样子是释放成功了,但用Oracle的管理工具看,或者看v$session表,发现连接还存在,状态是INACTIVE。
怎么办?
打开ODBC的跟踪器,运行单元测试程序xisql测试,看LOG,发现有打印:
xisql be4-cd4 ENTER SQLSetEnvAttr
SQLHENV 00000000
SQLINTEGER 201 <unknown>
SQLPOINTER [Unknown attribute 201]
SQLINTEGER 0
看看这个unknown参数是什么?原来是: SQL_ATTR_CONNECTION_POOLING, 也就是给ODBC环境加了缓冲池。
不调用这个,可以正常释放。
但是,用复杂的服务程序,发现还是释放不了,看LOG,有:
vwserver d24-8ac EXIT SQLDisconnect with return code -1 (SQL_ERROR)
HDBC 00AA1758
DIAG [25000] [Oracle][ODBC]Invalid transaction state. (0)
看样子是事务没有释放,就调用: SQLEndTran, 然后再释放吧,ok了。
为什么呢?
因为服务程序的数据库连接都用: SQLSetConnectAttr, 将连接属性设置成不自动提交的。而简单的单元测试程序缺省就是每执行完一条语句就立即提交的。
看来Oracle数据库在释放之前,不管你是否用了数据库修改,就是只调用SELECT语句,调用一下结束事务也是必要的。
- ODBC API不能释放Oracle数据库连接
- mysql-connector-odbc 的结果集不能释放的问题
- ODBC API
- 记一次Oracle数据库连接不释放问题排查过程
- Odbc-Access数据库连接
- java数据库连接 JDBC:ODBC
- ODBC 各种数据库连接串
- 数据库连接语句odbc
- JDBC-ODBC数据库连接
- 通过 ODBC API 连接 Oracle 11g 数据库
- OTL4使用ODBC连接ORACLE数据库无法关闭链接,释放内存
- 数据库连接自动释放
- oracle 中dblink的session不能自动释放
- oracle 中dblink的session不能自动释放
- java数据库连接(含odbc)
- 【java】jdbc-odbc桥数据库连接
- UDL ODBC 获取数据库连接字符串
- ODBC API访问数据库
- 进制之间的转化
- 数据库主体在该数据库中拥有 架构,无法删除。
- 天书上的练习-inlinehook IoCallDriver函数
- VB字符串左边填0的办法: LPad0
- 常用函数 Functions 类
- ODBC API不能释放Oracle数据库连接
- gcc生成静态库和动态库
- 常用函数 PageValidate 类
- linux mysql下 从 max_connections 的实验带来的思考
- 常用函数 SqlHelper 类
- jdom读取xml
- MySQL查询数据库中某字段已存数据的长度的方法
- C++中Ansi、Unicode、UTF8字符串之间的转换和写入文本文件[zz]
- c# 对Xml的增删改查