设为首页 收藏本站
查看: 503|回复: 0

[经验分享] SQL Server定时解锁

[复制链接]

尚未签到

发表于 2016-10-30 04:09:57 | 显示全部楼层 |阅读模式
  
  --未试用过,不知是否可行;
  
  在使用用友U8财务系统的时候,经常发现有人将其他人锁住,使其工作停顿。使用定时任务将锁住他人的进程取消。

在SQL SERVER系统中,没有找到一个设置可以指定在用户空闲多少时间后自动断开连接(本身对SQL SERVER就不是很感兴趣,又没有多少时间去研究学习。)。可是,在用友U8系统中,总是经常会出现有人将其他人锁住的情况(好象SQL SERVER的锁要比ORACLE的复杂),于是就不停的有人打电话过来说系统死掉了。刚开始的时候还发懵,我这边好好的,你怎么就死掉了呢?后来发现是锁的原因。也不知道是该埋怨SQL SERVER,还是该埋怨用友,想来想去,其他部门的只会埋怨我!

干脆自己写个任务,管你是正常任务,还是异常退出,反正只要锁住其他人超过10分钟,就把你干掉!

本以为事情了结了,结果发现用户还是很聪明的:以前可以跟他们说系统慢,让他们等会儿;现在可好,别人一打电话来就说,我的系统又锁住了,帮我解开!算了,时间缩短到5分钟吧。结果还不行!只好将等待时间减少到两分钟了。要是还打电话过来,就告诉他们,系统现在用的人很多,耐心等待两分钟就OK了!



/*
* 定时释放锁
* Pond Ka
* 2004年8月18日
* 试运行1.0
*
* 财务用友U8系统中,常常出现用户被其他用户锁住,系统不能正常运行的情况。
* 在这种情况下,需要手工将有锁的进程取消掉。
* 此功能将手工更改为自动运行。
*
* 在数据库系统中,作为任务,每1分钟运行一次。
*
* 取消进程的条件:
* 1、锁住了其他进程。
* 2、自身没有被其他进程锁住。
* 3、此进程已经空闲了2分钟以上。
*
*/


DECLARE
@USER_ID INT
, @KILLCMD VARCHAR(100)
, @WAIT_TIME INT
-- 设置空闲时间
SET @WAIT_TIME = 2;
-- 根据选择条件,选择出应该取消的进程
DECLARE cur_lock CURSOR FOR
SELECT spid
FROM master..sysprocesses
WHERE
DATEDIFF(minute, last_batch, getdate()) > @WAIT_TIME
AND blocked = 0
AND spid IN
(SELECT blocked
FROM master..sysprocesses);
-- 取消所有选择出的进程。
OPEN cur_lock;
FETCH NEXT FROM cur_lock INTO @USER_ID;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @KILLCMD = 'kill ' + CAST(@USER_ID AS VARCHAR);
EXECUTE (@KILLCMD);
FETCH NEXT FROM cur_lock INTO @USER_ID;
END;
CLOSE cur_lock;
DEALLOCATE cur_lock;

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-292998-1-1.html 上篇帖子: C#操作Sql Server(读取) 下篇帖子: SQL Server 2005 Suspect
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表