大力等高手请进
有个问题想请教,
我想将我数据库设置为,每当处理一个事务,限时30秒,如果30秒事务没有完成,自动将事务回滚。请问怎么处理?
问题点数:0、回复次数:7Top
1 楼txlicenhe(马可)回复于 2003-12-04 12:58:14 得分 0
联机帮助:
LockTimeout (clsServer)
The LockTimeout property of an object of ClassType clsServer sets or returns the amount of time until a lock request fails due to timeout.
Data Type
Long
Access
Read/write
Remarks
The value of this property must not be less than zero. The default is 20 seconds. For more information about locking a server, see LockObject, UnlockObject, and UnlockAllObjects.
See Also
clsServer
Top
2 楼yoki(小马哥--鬓微霜,又何妨)回复于 2003-12-04 13:04:08 得分 0
你可以将命令超时设为30秒,然后超过30秒事务没有处理完的话就会出错,你可以在错误处理中回滚事务Top
3 楼CrazyFor(冬眠的鼹鼠)回复于 2003-12-04 13:05:47 得分 0
Transact-SQL 参考
SET LOCK_TIMEOUT
指定语句等待锁释放的毫秒数。
语法
SET LOCK_TIMEOUT timeout_period
参数
timeout_period
是在 Microsoft® SQL Server™ 返回锁定错误前经过的毫秒数。值为 -1(默认值)时表示没有超时期限(即无限期等待)。
当锁等待超过超时值时,将返回错误。值为 0 时表示根本不等待,并且一遇到锁就返回信息。
注释
在连接开始时,该设置的值为 -1。设置更改后,新设置在其余的连接时间里一直有效。
SET LOCK_TIMEOUT 的设置是在执行或运行时设置,而不是在分析时设置。
READPAST 锁定提示为该 SET 选项提供了另一种方式。
权限
SET LOCK_TIMEOUT 权限默认授予所有用户。
示例
下例将锁超时期限设置为 1,800 毫秒。
SET LOCK_TIMEOUT 1800
GO
请参见
锁定提示
@@LOCK_TIMEOUT
SET
©1988-2000 Microsoft Corporation。保留所有权利。
Top
4 楼txlicenhe(马可)回复于 2003-12-04 13:11:18 得分 0
继续联机帮助:
自定义锁超时
当由于另一个事务已拥有一个资源的冲突锁,而导致 Microsoft® SQL Server™ 2000 无法将锁授权给该资源的某个事务时,该事务被阻塞以等待该资源的操作完成。如果这导致了死锁,则 SQL Server 将终止其中参与的一个事务(不涉及超时)。如果没有出现死锁,则在其它事务释放锁之前,请求锁的事务被阻塞。默认情况下,没有强制的超时期限,并且除了试图访问数据外(有可能被无限期阻塞),没有其它方法可以测试某个资源是否在锁定之前已被锁定。
说明 sp_who 系统存储过程可用于确定进程是否正被阻塞以及被谁阻塞。
LOCK_TIMEOUT 设置允许应用程序设置语句等待阻塞资源的最长时间。当语句等待的时间大于 LOCK_TIMEOUT 设置时,系统将自动取消阻塞的语句,并给应用程序返回"已超过了锁请求超时时段"的 1222 号错误信息。
但是,SQL Server 不回滚或取消任何包含该语句的事务。因此,应用程序必须有捕获 1222 号错误信息的错误处理程序。如果应用程序没有捕获错误,则会继续运行,并未意识到事务中的个别语句已取消,从而当事务中的后续语句可能依赖于那条从未执行的语句时,导致应用程序出错。
执行捕获错误信息 1222 的错误处理程序使应用程序得以处理发生超时的情况,并采取补救操作,例如可以自动重新提交阻塞的语句或者回滚整个事务。
若要确定当前 LOCK_TIMEOUT 设置,请执行 @@LOCK_TIMEOUT 函数,例如:
DECLARE @Timeout int
SELECT @Timeout = @@lock_timeout
SELECT @Timeout
GO
Top
5 楼pengdali()回复于 2003-12-04 13:34:55 得分 0
----超过了3秒将会自动强制停止.
SET LOCK_TIMEOUT 3000
或:
选中Microsoft SQL Servers-->工具栏,工具-->选项-->高级-->查询超时-->改为0
选中Microsoft SQL Servers-->工具栏,工具-->选项-->高级-->连接超时-->改为0Top
6 楼leimin(黄山光明顶)回复于 2003-12-04 15:56:41 得分 0
我认为:
如果30秒事务没有完成<>DEADLOCK!!
LOCK_TIMEOUT 有用么??Top
7 楼laurecn(每天努力多一点)回复于 2003-12-04 19:28:24 得分 0
upTop
相关问题
- pengdali(大力) ,请进。
- 谢谢(大力)!请pengdali(大力)进入接分。
- pengdali(大力) 请进,请教临时表的事情。
- meizz兄请进,谢谢你的大力帮助
- 感谢sumanden给我的大力帮助,请进来领分!
- 2002年度劳模奖!!!---->请 pengdali(大力)进来领奖。
- 感谢ZHANG9652对我的大力帮助!请进来拿分!
- pengdali(大力) 请来领分
- zqllyh(您问我也问总可以问出个所以然),pengdali(大力)和j9988(j9988) 请进,这900分特别酬谢《
- zqllyh(您问我也问总可以问出个所以然),pengdali(大力)和j9988(j9988) 请进,这900分特别酬谢 2




