我有以下代码:
ILookup<string, costcenterdata> areas = p_data.CostcenterDatas.ToLookup(p => OracleDataProvider.GetAreaForClient(p_data.ClientID), p => p);
它需要收集pocos并生成查找。为了确定密钥,它进入ORACLE表并从数据栏执行select foo。 没有什么花哨。这是在GetAreaFromClient中完成的,它与ODP.net打开连接,读取,关闭连接。没有实体框架或其他新奇的东西。
但有时似乎会产生锁定。上面的代码无休止地等待,最后,我们必须取消数据库中的连接。
toLockup可以以某种方式产生可能会或可能不会产生此锁的并行访问吗?
答案 0 :(得分:0)
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';