查看鎖定:
select request_session_id as spid,OBJECT_NAME(resource_associated_entity_id) as tableName
from sys.dm_tran_locks
where resource_type='OBJECT'
spid: 就是锁住表的进程
tableName: 就是被锁的表名
解锁:
在SQL Server 2005中解决死锁问题
作者:佚名 2007-05-29
数据库操作的死锁是不可避免的,本文并不打算讨论死锁如何产生,重点在于解决死锁,通过SQL Server 2005, 现在似乎有了一种新的解决办法。
将下面的SQL语句放在两个不同的连接里面,并且在5秒内同时执行,将会发生死锁。
use Northwind
begin tran
insert into Orders(CustomerId) values(@#ALFKI@#)
waitfor delay @#00:00:05@#
select * from Orders where CustomerId = @#ALFKI@#
commit
print @#end tran@#
SQL Server对付死锁的办法是牺牲掉其中的一个,抛出异常,并且回滚事务。在SQL Server 2000,语句一旦发生异常,T-SQL将不会继续运行,上面被牺牲的连接中, print @#end tran@#语句将不会被运行,所以我们很难在SQL Server 2000的T-SQL中对死锁进行进一步的处理。
现在不同了,SQL Server 2005可以在T-SQL中对异常进行捕获,这样就给我们提供了一条处理死锁的途径:
下面利用的try ... catch来解决死锁。
SET XACT_ABORT ON
declare @r int
set @r = 1
while @r <= 3
begin
begin tran
begin try
insert into Orders(CustomerId) values(@#ALFKI@#)
waitfor delay @#00:00:05@#
select * from Orders where CustomerId = @#ALFKI@#
commit
break
end try
begin catch
rollback
waitfor delay @#00:00:03@#
set @r = @r + 1
continue
end catch
end
解决方法当然就是重试,但捕获错误是前提。rollback后面的waitfor不可少,发生冲突后需要等待一段时间,@retry数目可以调整以应付不同的要求。
但是现在又面临一个新的问题: 错误被掩盖了,一但问题发生并且超过3次,异常却不会被抛出。SQL Server 2005 有一个RaiseError语句,可以抛出异常,但却不能直接抛出原来的异常,所以需要重新定义发生的错误,现在,解决方案变成了这样:
declare @r int
set @r = 1
while @r <= 3
begin
begin tran
begin try
insert into Orders(CustomerId) values(@#ALFKI@#)
waitfor delay @#00:00:05@#
select * from Orders where CustomerId = @#ALFKI@#
commit
break
end try
begin catch
rollback
waitfor delay @#00:00:03@#
set @r = @r + 1
continue
end catch
end
if ERROR_NUMBER() <> 0
begin
declare @ErrorMessage nvarchar(4000);
declare @ErrorSeverity int;
declare @ErrorState int;
select
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
raiserror (@ErrorMessage,
@ErrorSeverity,
@ErrorState
);
end
我希望将来SQL Server 2005能够直接抛出原有异常,比如提供一个无参数的RaiseError。
因此方案有点臃肿,但将死锁问题封装到T-SQL中有助于明确职责,提高高层系统的清晰度。现在,对于DataAccess的代码,或许再也不需要考虑死锁问题了。
相关推荐
附加数据库SQL Server 2000 (1)将TM\06\MrCy\MrCy\DataBase文件夹中的扩展名为db_MrCy.mdfF和db_MrCy.ldf的两个文件拷贝到SQL Server安装路径下的Data文件夹中。 (2)打开SQL Server 2000中的“企业管理器”,...
锁定数据库的一个表 代码如下: SELECT * FROM table WITH (HOLDLOCK) 注意: 锁定数据库的一个表的区别 代码如下: SELECT * FROM table WITH (HOLDLOCK) 其他事务可以读取表,但不能更新删除 代码如下: SELECT ...
123 4 数据库管理系统(DBMS) Microsoft SQL Server 2008 5 设计工具 PowerDesign 6 编程工具 JDBC访问数据库 7 数据库命名规则 数据表:以"t_"开头,后接表名 视图名:以"v_"开头,后接视图名 存储过程名:以"p_...
使用说明 系统介绍 本系统属于小型的餐饮管理系统,可以有效地对中小型餐厅消费进行管理,本系统应达到以下目标: 系统采用人机交互的方式,界面美观友好,信息查询...(6)如果添加菜品类别,需要在数据库中添加。
锁定数据库的一个表 代码如下 SELECT*FROMtableWITH(HOLDLOCK) ... SQLServer提供了强大而完备的锁机制来帮助实现数据库系统的并发性和高性能。用户既能使用SQLServer的缺省设置也可以在select语句中使用“加锁
系统介绍 本系统属于小型的餐饮管理系统,可以有效地对中小型餐厅消费...(6)通过“系统维护”菜单,可对数据库进行备份、恢复及权限设置操作。 (7)通过“系统设置”菜单,可对当前用户进行密码修改及锁定系统操作。
餐饮管理系统使用说明书 配置源程序 附加数据库SQL Server 2000 (1)将TM\\06\\MrCy\\MrCy\\DataBase文件夹中的扩展名为db_MrCy.mdfF和db_MrCy.ldf的两个文件拷贝到SQL Server安装路径下的Data文件夹中。...
纠正了在SQLServer下不同版本数据库备份时路径 错误问题。 5.(2011-03-14)纠正了程序中密码验证不区分大小写的错误。 6.(2011-03-18) 纠正了系统锁定后无法解锁的错误 2011-03-18 23:20 南充市...
+数据库页增加查看我的表功能菜单项,可管理视图、存储过程及自定义函数和查看表结构等; ^部分菜单及按钮增加图标,增加美观度; +内存管理页增加AWE开关,以解决部分电脑内存不足造成运行缓慢的问题,AWE功能也...
93. cliconfg-------SQL SERVER 客户端网络实用程序 94. Clipbrd--------剪贴板查看器 95. conf-----------启动netmeeting 96. certmgr.msc----证书管理实用程序 操作详解 net use ipipc$ " " /user:" " 建立IPC...
Oracle 主要配置文件介绍: profile文件,oratab 文件,数据库实例初始化文件 initSID.ora,监听配置文件, sqlnet.ora 文件,tnsnames.ora 文件 <br>1.2 Oracle 主要配置文件介绍 1.2.1 /etc/profile 文件...
如何在DotNet 2的登录组件中检索用户的锁定状态及解锁? ASP.NET 2.0, 想说爱你不容易 SqlDataSource WEB控件:当DeleteCommandType= 遭遇 ASP.NET 2.0 只读 TextBox 回发后信息丢失的 bug asp.net2.0:扩展...
附加数据库SQL Server 2000 (1)将TM\06\MrCy\MrCy\DataBase文件夹中的扩展名为db_MrCy.mdfF和db_MrCy.ldf的两个文件拷贝到SQL Server安装路径下的Data文件夹中。 (2)打开SQL Server 2000中的“企业管理器”,...
系统要求:(不符合就不能正确运行) 1) 安装有Microsoft SQL Server; 2) 安装有.NET Framework; 3) 安装了IIS。 3. 系统配置: 1) 首先解压缩文件。 2) 在IIS建立一个新的虚拟目录,把...
无需呼叫昂贵的技术人员。...支持具有UEFI安全启动...使用 PXE 从网络启动锁定的电脑恢复MS SQL Server 2019/2017/2016/2014/2012/2008/2005/2000的密码解锁微软访问 XP/2003/2000/97/95 数据库恢复PDF密码并删除PDF限制
2. 系统要求:(不符合就不能正确运行)1) 安装有Microsoft SQL Server;2) 安装有.NET Framework;3) 安装了IIS。3. 系统配置:1) 首先解压缩文件。2) 在IIS建立一个新的虚拟目录,把RBWebEdu目录下的文件全部复制...
餐饮管理系统使用说明书 配置源程序 附加数据库SQL Server 2000 (1)将TM\\06\\MrCy\\MrCy\\DataBase文件夹中的扩展名为db_MrCy.mdfF和db_MrCy.ldf的两个文件拷贝到SQL Server安装路径下的Data文件夹中。...
支持Microsoft Access 97/2000/2002, SQL Server 6.5/7.0/2000 和 MySql数据库格式。 同时提醒大家的是:请尽量不要使用默认数据库名称(snitz_forums_2000.mdb),同时尽量将数据 库按照物理地址存放...
,系统底层采用ESP32开发板为核心,在ESP32开发板上接...同时,MySQL附带了一系列管理工具,如MySQL Server、MySQL Workbench、MySQL Shell等,便于用户进行数据库配置、监控、备份、恢复、迁移等工作。 社区与生态系统