关于Oracle数据库死锁问题的研究与讨论

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

关于Oracle数据库死锁问题的研究与讨论
周喆
【摘要】在网络环境下,利用数据库可以实现资源的共享,但是如果数据库使用不当就会发生死锁现象,因此本文主要针对Oracle数据库死锁问题进行研究和讨论,并提出死锁问题的解决办法。

【期刊名称】《黑龙江科技信息》
【年(卷),期】2015(000)002
【总页数】1页(P99-99)
【关键词】Oracle数据库;死锁;问题;研究
【作者】周喆
【作者单位】中国联合网络通信有限公司长春市分公司信息化服务中心,吉林长春 130000
【正文语种】中文
由于数据库系统在同一时刻的访问量较大,导致数据库引擎要处理大量数据,如果处理过程中程序设计出现问题,很可能会出现死锁现象,同时还会影响数据库系统的性能,对于Oracle数据库来说,要有效避免死锁现象的发生,就要合理正确的设计程序,根据Oracle提供的视图,利用SQL语句来检测死锁现象,这是解决Oracle数据库死锁问题的一种有效方法。

1.1 数据库锁机制
Oracle数据库可以实现多个用户同时操作,当多用个用户共同存取数据时,就会
发生多个用户操作同一个数据的现象,我们可以称做为并发操作,对于这种现象的出现应加以控制,否则会影响用户存储和读取数据,从而造成对数据库的一致性破坏,因此为了避免这种情况的发生,我们可以采用加锁机制,保证每个用户对Oracle数据库的操作是独立的。

另外,为了保证了数据的一致性,加锁机制在操作Oracle数据库之前应向系统发送请求,并将相应的事务进行加锁,其他事务想要对其进行处理就一定要进行解锁操作。

1.2 锁的类型
Oracle数据库锁根据保护对象的不同可以分为两种类型,一类为DML锁,也可以称为数据锁,此类锁在Oracle数据库中主要作用是保护数据的完整性,另外DML锁还可以分为TM(表级锁)和TX锁(事务锁或行级锁),当执行DML语句时,系统会自动申请TM锁,TM锁申请完成之后,系统会自动申请TX锁,同时会对锁定数据的位置进行标识,因此在事务加锁之前只需对TM锁模式的相容性进行检查就可以了,这样能够提高系统的效率,另一类为DDL锁,这类锁在Oracle数据库中主要是保护数据库对象的结构,例如数据库的内部结构、内部锁以及表、索引等结构定义。

简单来说,死锁现象就是指当多个用户已经分别锁定了某资源,但是还希望能够持有对方的资源,这样就会产生死锁现象,这也是Oracle数据产生死锁现象的根本原因,具体表现在以下几个方面:
2.1 在Oracle数据库中,用户1访问表1时并对表1进行加锁,之后对表2进行访问,用户2访问表2时对表2进行加锁,接着对表1进行访问,但是由于用户2对表2进行了加锁,因此用户1必须等到表2释放后才能对表2进行访问,而用户1对表1进行了加锁,因此用户2一定要等到表1释放后才能对表1进行访问,因此就产生了死锁现象。

2.2 用户1对某表中的记录进行查询,并对这条记录做出修改,同时用户2也对这
条记录进行修改,由于用户1想将共享锁升为独占锁,但是由于用户2的独占锁
的存在导致用户1不能上升为独占锁,同时也不能将共享锁释放,而用户2必须
要等到用户1共享锁释放才可以进行,因此产生了死锁现象。

2.3 当多个update语句不满足条件时,通过对全表的扫描将行级锁升级为表级锁,这样很可能造成死锁现象。

2.4 当Oracle数据库中的数据量非常大时,同时建立的数据库引擎过少,这时如
果对全表经常进行扫描,就会造成死锁现象的发生。

3.1 Oracle数据库死锁检测方法
3.1.1 Oracle自动死锁检测
Oracle数据库死锁检测应执行语句,并将语句中的数据进行释放,之后遇到错误
代码以及等待资源时检测到死锁的字样,Oracle数据库在检测到死锁之后会出现
相应的信息,这时相关的工作人员应把消息录入警告日志文件中,并在相应的目录下创建跟踪文件,文件内容主要是死锁的相关信息。

工作人员在定位Oracle数据库死锁问题时,要经常查看警告日志文件,如果找出“0RA-00060”相关信息,
就说明有死锁现象产生,但是还需要工作人员与跟踪文件进行对应,程序比较繁琐,因此我们应采用SQL语句检测死锁。

3.1.2 SQL语句检测死锁
SQL语句检测死锁需要五个视图,即V$SESSION视图、V$ LOCKED_OBJECT视图、V$P R OCESS视图、DBA_OBJECTS视图以及V$LOCK视图,这些视图可以检测Oracle数据库死锁,另外还可以通过语句来检测Oracle数据库死锁。

3.2 解决Oracle数据库死锁问题的主要办法
3.2.1 调整程序设计,程序设计的不准确是导致死锁现象出现的常见原因,因此当确定Oracle数据库死锁现象出现的原因是程序设计不稳定导致的,这时我们只需要对程序设计重新进行调整,就可以有效解决死锁问题,除此之外,检测到死锁问
题时,首先应确定Oracle数据库死锁现象出现的原因,其次应将死锁定位在程序中位置,最后将程序进行关闭,并对程序进行相应的修改,这是解决Oracle数据库死锁现象的长远方法。

3.2.2 解除死锁可以采取以下方法:回滚某个事务、利用DBA对事务进行撤销来
完成解锁、利用DBA进行加锁或者解锁事务、系统管理人员通过KILL一9 P R OCESS关闭死锁进程。

虽然这些方法可以解除死锁,但是会为大型应用系统带来
一定的风险,因此对于Oracle数据库死锁问题应尽量选择从程序设计方面来解决,尽量减少死锁现象的出现。

Oracle数据库在使用过程中经常出现死锁现象,对系统造成很多不良的影响,因
此关于Oracle数据库死锁问题的研究和讨论是必要的,本文主要从数据锁的机制以及锁的类型、Oracle数据库死锁问题出现的原因以及数据Oracle数据库死锁问题解决办法三方面入手,对Oracle数据库死锁问题进行详细的分析,通过分析我们可以看出想要有效的解决死锁现象,最好从程序设计方面入手,而且这种方法简单可靠。

【相关文献】
[1]姜文,刘立康.Oracle数据库死锁问题研究[J].计算机技术与发展,2014,03:97-101. [2]周亚平.Oracle数据库死锁问题研究[J].计算机光盘软件与应用,2014,16:310+312. [3]康陆.关于Oracle数据库动态SQL数据获取应用方法的研究与实践[J].电脑知识与技术,2010,22:6137-6139.
[4]张咏梅.基于Oracle数据库安全问题的研究[J].数字技术与应用,2013,01:173,175. [5]李雁敏.并发访问ORACLE数据库的数据死锁分析和解决措施[J].内蒙古科技与经济,2012,13:79-80.。

相关文档
最新文档