首页 > 代码库 > SQLServer+.net 事务锁表问题
SQLServer+.net 事务锁表问题
最近操作Sqlserver遇到一个锁表问题。找了好久才搞明白原因和解决办法。
故障现象:
每次启动事务后,执行了删除或者修改操作以后,再执行查询操作就锁表。
解决过程:
1:最初以为SQLServer进行删除和修改操作后是表锁定机制,造成无法查询,结果不是。
2:搜索查询锁表的SQL,分析了一下锁表过程。
查看被锁表:select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName from sys.dm_tran_locks where resource_type=‘OBJECT‘--spid 锁表进程 --tableName 被锁表名解锁:declare @spid int Set @spid = 57 --锁表进程declare @sql varchar(1000)set @sql=‘kill ‘+cast(@spid as varchar)exec(@sql)--查询出死锁的SPIDselect blockedfrom (select * from sysprocesses where blocked>0 ) a where not exists(select * from (select * from sysprocesses where blocked>0 ) b where a.blocked=spid)--输出引起死锁的操作DBCC INPUTBUFFER (@spid)--查询当前进程数select count(-1) from sysprocesses where dbid in (select dbid from sysdatabases where name like ‘%telcount%‘);
3:最后发现原因,原因在于,delete操作时如果是删除指定一条记录,SQLServer就会对该条记录进行了行锁定,这时如果再查询该条记录,就会造成死锁。
同样的SQL语句和操作。我在Oracle中从来没有发现过,所以造成这个问题找了半天。
4:最后修改程序。对于锁定的记录不再进行查询操作。
SQLServer+.net 事务锁表问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。