Sybase数据库死锁对策
应的操作员信息表,便可知道操作员是谁。 Fid spid status loginame origname blk dbname cmd 0 1 lock sleep lm lm 18 QJYD SELECT 0 2 sleeping NULL NULL 0 master NETWORK HANDLER 0 3 sleeping NULL NULL 0 master NETWORK HANDLER …… 用sp_lock浏览锁 要得到关于当前SQL Server上保持的锁的报告,可用系统过程sp_lock [spid1[,spid2]],spid1,spid2是表master.dbo.sysprocesses中的sql server进程id号,用sp_who可以得到锁定与被锁定的spid号: ◆locktype列显示加锁的类型和封锁的粒度,有些锁的后缀还带有blk表明锁的状态。前缀表明锁的类型:Sh-共享锁,Ex-排它锁或更新锁,中间表明锁死在表上("table"或’intent’)还是在页上(page). 后缀"blk"表明该进程正在障碍另一个需要请求锁的进程。一旦正在障碍的进程一结束,其他进程就向前移动。"demand"后缀表明当前共享锁一释放, 该进程就申请互斥锁。 ◆table_id列显示表的id号,结合sysobjects即可查出被封锁的表名。 执行该进程后屏幕显示 Fid Spid locktype table_id page row dbname Class context 0 1 Sh_intent 678293476 0 0 QJYD Non Cursor LockFam dur 0 1 Sh_page 678293476 31764 0 QJYD Non Cursor Lock 0 18 Ex_intent 9767092 0 0 QJYD Non Cursor LockFam dur …… 定位出错处 根据sp_who与sp_lock命令的结果,结合sysobjects和相应的操作员信息表。得到操作员及其在死锁时所操作的库表,便大约可以知道应用程序的出错处,再询问操作员在死锁时执行什么操作以进一步认证。最后查找程序并修正之。
- SQL Server和Oracel中的锁和死锁(06-14)