国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

proc oracle 連接釋放不了的問題

2024-08-29 13:54:03
字體:
來源:轉載
供稿:網友
轉自:http://www.91linux.com/html/article/database/Oracle/20081205/14333.html

PRoc oracle 連接釋放不了的問題
筆者公司的應用系統每隔一段時間,oracle連接就達到上限了;懷疑是應用沒有正確的釋放oracle連接;說來慚愧,proc斷斷續續的用了幾年,可能是以前公司的代碼寫得太好了,從沒有去關心基本的proc連接、釋放是怎么處理的,這問題逼得我得去熟悉這方面的東西了;弄了兩天才找到問題的根源,其中大半時間是熟悉原系統的代碼、定位問題,其他時間是找網上的資料看、做相關的測試;

經過分析,將問題定位在了數據庫打開、關閉的相關函數;后臺c++應用的根本沒有成功的釋放oracle 連接,數據庫操作函數如下:

sql_context db_open(const char* usr, const char* pwd)
{

EXEC SQL BEGIN DECLARE SECTION;
sql_context ctx;
char username[64];
char passwd[64];
EXEC SQL END DECLARE SECTION;

struct sqlca sqlca;
EXEC SQL ENABLE THREADS;
EXEC SQL CONTEXT ALLOCATE :ctx;
EXEC SQL CONTEXT USE :ctx;

strcpy(username,usr);
strcpy(passwd,pwd);

EXEC SQL CONNECT :username IDENTIFIED BY :passwd;

if (sqlca.sqlcode)
{
printf( "連接oracle數據庫失敗!");
return NULL;
}

return ctx;
}

int db_close(sql_context ctx)
{
struct sqlca sqlca;
EXEC SQL CONTEXT FREE :ctx;
if( SQLCODE != 0 )
{
printf( "斷開數據庫連接失敗!%d:%s/n",SQLCODE,sqlca.sqlerrm.sqlerrmc );
return -1;
}
return 0;
}

經過測試,發現以上db_close根本沒有釋放數據庫連接;經過和網上示范程序的對比,終于發現了問題:

原來oracle 的sql context,需要 release之后,才能正確釋放數據庫連接;如果不做release,free context不會報任何錯誤(即db_close中并不返回-1),但是數據庫連接卻不會釋放(對oracle的這個處理機制,汗一個-_-|||,或者說明我的proc比較弱吧,可能還有別的解決辦法);

把db_close改成如下,問題解決:

int db_close(sql_context ctx)
{
struct sqlca sqlca;

EXEC SQL CONTEXT USE :ctx;
EXEC SQL COMMIT WORK RELEASE;
EXEC SQL CONTEXT FREE :ctx;

if( SQLCODE != 0 )
{

printf( "斷開數據庫連接失敗!%d:%s/n",SQLCODE,sqlca.sqlerrm.sqlerrmc );
return -1;
}
return 0;
}


注意,以上CONTEXT FREE 執行成功或者失敗,SQLCODE 都是0 !!!



本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/workhardupc100/archive/2009/12/30/5108876.aspx
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 隆德县| 息烽县| 错那县| 和田市| 日照市| 阿合奇县| 永昌县| 文安县| 奉新县| 湖北省| 航空| 宁陕县| 稻城县| 老河口市| 成都市| 江津市| 佳木斯市| 无极县| 阳山县| 扶绥县| 大同市| 万安县| 广宁县| 达尔| 呼伦贝尔市| 潮州市| 渑池县| 临桂县| 雅安市| 林周县| 美姑县| 常山县| 光泽县| 宁德市| 平潭县| 五家渠市| 苍南县| 兰溪市| 固镇县| 章丘市| 尤溪县|