日期:2014-05-18  浏览次数:20471 次

sql server 阻塞
我用PB10+SQL SERVER 2000 写了一个程序,要求可以多用户可以同时登录使用系统,但当前一个用户登录后,后面一个用户单击"登录"按钮后就不动了,要在前一个用户退出系统或是进入系统做一些其它操作(如查询数据,新增数据)后面一个用户才可以登录系统.后来在企业管理器里面查了一下,好像是阻塞的原因,请问该如何解决?或者说不是阻塞的原因.还有一个现象就是我写了另外一个多用户同时使用没有问题,使用的是本地数据库.前面有问题的是使用的别人的数据库.这样看来,是不是数据库设置的问题,请各位高人给我分析一下

------解决方案--------------------
SQL code
declare Roy_lock cursor for
select 
    db_name(dbid),0,blocked
from
    master..sysprocesses a
where
    Blocked>0 and
    not exists(select 1 from Master..Sysprocesses where blocked=a.spid)
union 
select 
    db_name(dbid),spid,blocked
from
    master..sysprocesses a
where
    Blocked>0
declare @DBName sysname,@spid bigint,@Blocked bigint
open Roy_lock
fetch next from Roy_lock into @DBName,@spid,@Blocked
while @@fetch_status=0
begin
    if @spid=0
        print N'鎖定數據庫:'+@DBName+'    語句:'
    else
        print N'鎖定數據庫:'+@DBName+'    進程SPID:'+rtrim(@spid)+' 語句:'
    dbcc inputbuffer(@Blocked)
fetch next from Roy_lock into @DBName,@spid,@Blocked
end
close Roy_lock
deallocate Roy_lock

------解决方案--------------------
看来楼上版主也不怎么样哦,技术还没有更新,还是查Master..Sysprocesses这个表
------解决方案--------------------
很有可能是PB代码的问题,查看一下登录过程中,对用户表的使用情况,

应该是没有及时释放锁,提交事务或ADO控件的参数不正确.
------解决方案--------------------
探讨

看来楼上版主也不怎么样哦,技术还没有更新,还是查Master..Sysprocesses这个表

------解决方案--------------------
1. 首先查 那条语句堵塞了,大班和小f姐,都已经给出方法了。
2. 降低锁的粒度。或者放弃锁。