问题是这样的:
我一个局域网有几台机器访问另外一台机器的数据库,
有时一台机器打开程序时出现超时已过期的错误,然后我去看数据库
发现有堵塞现象。这时我关闭那个造成堵塞进程的程序后,那个程序关闭之前一段时间
输入进数据库的一些数据都会丢失(程序关闭之前,在程序里查询数据显示的是已经
输入至数据库里了)
------------------------------------------------------------------------
着急啊,恳求达人们帮忙啊?
我一个局域网有几台机器访问另外一台机器的数据库,
有时一台机器打开程序时出现超时已过期的错误,然后我去看数据库
发现有堵塞现象。这时我关闭那个造成堵塞进程的程序后,那个程序关闭之前一段时间
输入进数据库的一些数据都会丢失(程序关闭之前,在程序里查询数据显示的是已经
输入至数据库里了)
------------------------------------------------------------------------
着急啊,恳求达人们帮忙啊?
你们所说的事务控制是在sql里面是还是使用 ADOCONNECTION的事务??
非得在存储过程中使用事务???
=================================================
jiemian.ADOConnection1.BeginTrans;
try
adoquery1.Post;
adoquery3.Post;
with adoquery2 do
begin
close;
sql.Clear;
sql.Add('select max(version) from gongshixishu');
open;
iGugongVersion:=fields[0].AsInteger;
end;
showmessage('操作成功!!!');
jiemian.ADOConnection1.CommitTrans;
except
jiemian.error('操作失败!!!');
jiemian.ADOConnection1.RollbackTrans;
=========================================================
adoconnection1.BeginTrans;
try
//处理过程
adoconnection1.CommitTrans;
except
adoconnection1.RollbackTrans;
end;
with adoquery2 do
begin
close;
sql.Clear;
sql.Add('select max(version) from gongshixishu');
open;
iGugongVersion:=fields[0].AsInteger;
end;
你现在要找究竟是哪条语句造成的堵塞。
可以试一下:
1.
sp_who2 active
然后看下blkby列
2.
然后dbcc inputbuffer(blkby列值).
这样就可以找到堵塞之前执行的SQL语句了,在获取该语句后,分析一下其与其它事务的并行性关系,是不是在事务中执行了费时或等待的操作,导致事务一直HOLD一把排它锁,导致其它事务一直在等待锁资源。
具体问题具体分析,你先找一下原因吧
特别是liangpei2008,现结贴了。