为什么数据库表打不开,如何判断表被锁住?在线等待......
我写的定时采集程序(定时写更新数据表)运行一段时间后自动停止。此时系统资源充足。
这表只有一条记录600个字段,采集程序隔5秒跟新一次。但是客户端打不开表。请问各位是什么原因。如果是表被锁住,如何解开锁?
问题点数:0、回复次数:7Top
1 楼tj_dns(愉快的登山者)回复于 2003-09-02 13:20:26 得分 0
设定锁超时:
SET LOCK_TIMEOUT 1800
显示连接数据库的命令和进程号:
select B.name, A.cmd, A.spid from master..sysprocesses A
left join master..sysdatabases B on A.dbid = B.dbid
where B.name = 'dbname'
杀掉连接的进程,释放数据库:
kill spidTop
2 楼jiandanyu(简单)回复于 2003-09-02 13:35:09 得分 0
可以试一下从查询分析器中是否能打开。
如果是表被锁住,打开企业管理器--管理--当前活动--锁\对象
找到锁表的进程,右击属性--取消进程Top
3 楼wrd001()回复于 2003-09-02 14:02:47 得分 0
谢谢上面两位朋友的关注。一定给分
当采集程序停止后,表在分析器中也打不开。
再请问:我如何在程序判断是那个进程锁住表,并将它快KILL。程序要保证连续运行。
Top
4 楼nboys()回复于 2003-09-02 14:05:22 得分 0
create proc p_name
@databaseName varchar(100)
as
declare @spid int,@sql varchar(4000)
set @sql='declare c_name cursor scroll local for select spid from master..sysprocesses where dbid=db_id('''+@databaseName+''')'
exec(@sql)
open c_name
fetch next from c_name into @spid
while @@fetch_status<>-1
begin
kill @spid
fetch next from c_name into @spid
end
close c_name
deallocate c_name
go
执行: exec p_name 'databaseName'Top
5 楼wrd001()回复于 2003-09-02 14:21:30 得分 0
nboys:
你好,你上面的过程执行时提示错误。我找不到原因,帮我看看。谢谢了Top
6 楼wrd001()回复于 2003-09-02 14:28:42 得分 0
nboys:
执行上面过程时,提示c_name 不存在,为什么?Top
7 楼zarge(鲨去来兮)回复于 2003-09-03 02:51:34 得分 0
try
create proc p_name
@databaseName varchar(100)
as
declare @spid int,@sql varchar(4000)
declare c_name cursor scroll local for select spid from master..sysprocesses where dbid = db_id(@databaseName)
open c_name
fetch next from c_name into @spid
while @@fetch_status<>-1
begin
kill @spid
fetch next from c_name into @spid
end
close c_name
deallocate c_name
go
Top




