祝所有各自的天才在那里,先谢谢。
我有一个Asp.NET Web服务,它有大约20到30种方法可供公开。 对于数据库,我使用Oracle数据库,在删除重复的wordNet和单个类的DB操作的帮助下,对于每个请求我打开连接并在其工作完成后关闭,这意味着我关闭了所有的连接我的代码中没有连接泄漏。我已经检查了10次,但是当我去检查数据库(Oracle 11G)时,有许多会话处于非活动状态超过20小时。我正在V $ Session表中查看这些会话,但我很困惑,即使我关闭所有连接,它们也不会在很长一段时间内被破坏。
请与我分享您的答案,因为我可以做的就是关闭所有连接并且我做得很好但是仍有很多非活动会话超过20小时。这怎么可能?
答案 0 :(得分:0)
我们在asp.net mvc项目中遇到类似的问题,连接到Oracle数据库(带池)。
经过很长一段时间我们发现问题出在oracle db-links上。如果您使用oracle db-link调用存储过程,则必须在存储过程开头处调用DBMS_SESSION.CLOSE_DATABASE_LINK('db_link_name');
。
例如:
PROCEDURE simple_procedure(refCur out SYS_REFCURSOR) AS BEGIN
/* we don't really know if db-link is open or not */
BEGIN
DBMS_SESSION.CLOSE_DATABASE_LINK('dblink_name');
EXCEPTION WHEN OTHERS THEN null;
END;
/* call db-link */
OPEN refCur FOR SELECT * FROM DUAL@dblink_name
EXCEPTION WHEN NO_DATA_FOUND THEN null;
END simple_procedure;
此会话问题消失后。