- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
医院信息系统oracle数据库中Deadlocks 探究
医院信息系统oracle数据库中Deadlocks 探究
摘 要 本文阐述了oracle中Deadlocks在数据库实际环境中的形成和解决,并以医院管理信息系统为例,介绍了实际使用时的一些死锁表现及解决方法,使读者对oracle数据库中中的Deadlocks有更深入的了解和掌握。
关键词 数据库;ORACLE;Deadlocks;解锁
中图分类号TP392 文献标识码A 文章编号 1674-6708(2013)98-0222-02
医院管理信息系统(HIS)是基于现代计算机数据库技术的一套内容涵盖广泛,流程复杂,数据量庞大的应用程序管理系统,并且要求系统具有响应速度快、可靠性高等特点。在HIS的实际应用中,数据阻塞及死锁会给整个系统的可靠性带来很大的危害,严重时会导致医院HIS系统的瘫痪,影响医院正常运转。下面以oracle数据库为例介绍死锁的形成原因和解决方法。
ORACLE数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作
虽然加锁能够有效的解决并发操作,但是任何资源的独占都会有死锁的危险。例如:有两个事务W1,W2,W1对数据A施加独占封锁,W2对数据B施加了独占封锁。再如W1要对数据B加锁,由于B已被W2独占封锁,因此W1置于等待状态,等待B被释放;现在若W2也要对A进行封锁,由于A已被W1独占封锁,因此W2也被置于等待状态。这样就形成了两个事务相互等待的状态,而且永远不能结束,此种情况称为死锁。
Deadlocks(死锁)是指在多道程序设计环境下,两个或两个以上进程(Oracle会话),相互争夺已锁定的资源,在无外力协助下,永远分配不到必需的资源而无法继续运行而产生的一种特殊现象。对于死锁最好的列子是Kansas立法机构于20世纪早期通过的一个法规,其中说到“当两列车在十字路口逼近时,它们要完全停下来,且在一列列车开走之前另一列列车不能启动。”
在Oracle数据库中能自动发现死锁,并选择代价最小的,即完成工作量最少的事务予以撤消,释放该事务所拥有的全部锁,使其它的事务继续工作下去。产生死锁的原因可归结为如下两点:
1)竞争资源。当系统中供多个进程共享的资源如打印机、公用队列等,其数目不足以满足进程的需要时,会引起诸进程的竞争而产生死锁;
2)进程间推进顺序非法。进程在运行过程中,请求和释放资源的顺序不当,也同样会导致产生进程死锁。
那么如何快速有效的解除Oracle中死锁现象呢,结合平时我院医院信息系统中实际应用,主要用以下两种方法来解锁:
第一种方法是,通过PLSQL工具,用当前数据库用户名(USERNAM)E登录后,点击 Tools-Session,里面有很多的Session和进程,下面有一个Locks的Tab,选中那个Tab,然后一条一条地去上面Session,如果Locks这一栏有数据,就说明被锁住了,在Objec_Name里面可以看到表名。可以得到Sid和Serial#,接着执行以下语句就可以解锁:
alter system kill session sid,serial#;
第二种方法是用语句得到详细的被锁住的表的信息,具体语句如下:
SELECT /*+ rule */ s.username,
decode(l.type,TM,TABLE LOCK,
TX,ROW LOCK,
NULL) LOCK_LEVEL,
o.owner,o.object_name,o.object_type,
s.sid,s.serial#,s.terminal,s.machine,s.program,s.osuser
FROM v$session s,v$lock l,dba_objects o
WHERE l.sid=s.sid
AND l.id1=o.object_id(+)
AND s.username is NOT Null
以上语句在数据库当前用户下执行后,可以从执行结果中看到表名以及对应的Sid和Serial#,再用上面提到的解锁语句就可以了
alter system kill session sid,serial#
若通过以上两种方法将死锁的进程杀掉后,死锁的进程状态被置为killed,但是锁定的资源很长时间不释放,
您可能关注的文档
最近下载
- 2024-2025学年 八年级上册物理(2024年新教材)教材课后习题-练习与应用(原动手动脑学物理).docx VIP
- 建筑施工承插型盘扣式钢管脚手架安全技术标准 JGJT231-2021.pdf VIP
- 动物学全套课件.pptx VIP
- 公务礼仪培训.pptx VIP
- (2025年高考真题)2025年全国高考一卷英语真题(原卷版).docx VIP
- Audition实例教程(Audition CC 2019)全套PPT课件.pptx VIP
- 中国糖尿病足诊治指南(全文版).doc VIP
- GA602-2013 干粉灭火器装置.docx VIP
- 初中校园心理剧剧本集合3篇.docx VIP
- 冷库安全操作规程.docx VIP
原创力文档


文档评论(0)