SQLPlus连接后是否占用独占会话导致.NET应用无法执行更新?
问题解答
sqlplus默认不会占用独占会话,同一数据库用户可以同时建立多个并发连接。你的.NET应用执行command.ExecuteNonQuery()时挂起,核心原因大概率是锁冲突,而非sqlplus连接本身的独占限制。
可能的触发场景及解决方向:
- sqlplus会话中执行了
UPDATE/INSERT/DELETE这类DML语句,但未执行COMMIT或ROLLBACK,此时相关表或行被加上排他锁,.NET应用的更新请求会被阻塞,直到锁被释放。 - 排查sqlplus的未提交事务:在sqlplus中执行
SELECT * FROM V$TRANSACTION;,如果返回结果,说明存在未结束的事务,执行COMMIT或者ROLLBACK后再测试.NET应用。 - 确认.NET应用的更新语句是否和sqlplus中未提交的操作涉及相同的表或行,这是锁冲突的直接触发点。
- 查询数据库阻塞状态:执行
SELECT blocking_session, sid, serial#, sql_id FROM V$SESSION WHERE blocking_session IS NOT NULL;,找到阻塞源会话后,要么让该会话提交/回滚,要么谨慎终止阻塞会话。
内容的提问来源于stack exchange,提问作者Frank Martin
相关产品推荐
相关产品推荐

