.net . tollookup中的数据库访问——它会产生表锁吗?

本文关键字:tollookup 数据库 访问 net | 更新日期: 2023-09-27 17:54:07

我有以下代码:

ILookup<string, costcenterdata> areas = p_data.CostcenterDatas.ToLookup(p => OracleDataProvider.GetAreaForClient(p_data.ClientID), p => p);

获取pocos集合并生成查找。为了确定键,它转到ORACLE表并执行select foo from data where bar。没有什么幻想。这是在GetAreaFromClient中完成的,它打开连接,读取,关闭与ODP.net的连接。没有实体框架或其他新奇的东西。

但有时它似乎会产生锁。上面的代码没完没了地等待,最后,我们不得不取消数据库中的连接。

是否可能是toLockup以某种方式产生了一个可能产生或不产生此锁的并行访问?

.net . tollookup中的数据库访问——它会产生表锁吗?

Oracle的锁/阻塞更类似于sql server的快照隔离,所以不应该有任何阻塞的简单选择

你确定这个方法只是在做一个选择或者它的连接没有被用于其他事情吗?

在任何情况下,dba应该能够帮助您确定连接被阻塞的原因。你也可以试着自己看看,如果你有这样的权限:

select 
   ao.object_name,
   ao.object_type,
   s.sid,
   s.username,
   s.status,
   s.osuser,
   s.machine,
   s.program,
   s.module,
   s.wait_time,
   s.seconds_in_wait,
   lo.inst_id,
   s.*, lo.*
from
   gv$locked_object lo ,
   gv$session s,
   all_objects ao
where
   s.sid = lo.session_id
and
   lo.object_id = ao.object_id
and s.username = 'connectionUserName';