摘要:if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sp_who_lock]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)drop procedure [dbo].[sp_who_lock]GOgocreate procedure sp_who_lockasbegindeclare @spid int,@bl int,@intTransactionCountOnEntry int, @intRowcount int, @intCo
阅读全文
摘要:1.死锁原理根据操作系统中的定义:死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态。死锁的四个必要条件:互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用。请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源。非剥夺条件(No pre-emption):已经分配的资源不能从相应的进程中被强制地剥夺。循环等待条件(Circular wait):系统中若干进程组成环路,该环路中每个进程都在等待相邻进程正占用的资源。对应到SQL Server中,当在两个或多个任务中,如
阅读全文
摘要:表A】与【表B】之间有外键约束(具体怎么约束的无所谓,因为外键和事务死锁没有绝对关系 )。【表A】=主键表,【表B】=外键表。公司有几位程序员写的代码总是出现死锁,现在将事务死锁情况重现.using(事务){try{for()//一个循环{if(查询【表A】有该【记录】==false)//这个查询没有用当前事务的数据库连接,而是新开一个数据库连接查询数据库{将【记录】插入【表A】;插入【表B】;}}事务.提交();}catch{事务.回滚();}}4月25日早9:00补充:以上代码逻辑如果放在一个存储过程里面,是没有问题的。但是放在C#中,程序员稍不注意,就很可能出现问题。出现问题的关键地方在
阅读全文