oracle死锁原因分析

oracle死锁原因分析

ID:40563551

大小:32.00 KB

页数:5页

时间:2019-08-04

oracle死锁原因分析_第1页
oracle死锁原因分析_第2页
oracle死锁原因分析_第3页
oracle死锁原因分析_第4页
oracle死锁原因分析_第5页
资源描述:

《oracle死锁原因分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、oracle死锁原因分析死锁的原因1。模拟死锁1。1。主表--CreatetablecreatetableWDZ1(  WDZ1IDNUMBERnotnull,  MEMO  VARCHAR2(20));altertableWDZ1  addconstraintXXXXXXprimarykey(WDZ1ID);1。2。从表(没有外健的索引)--CreatetablecreatetableWDZ2(  WDZ2IDNUMBERnotnull,  WDZ1IDNUMBER,  MEMO  VARCHAR2(20));--Create/Recreateprimary,uniqueandforeign

2、keyconstraintsaltertableWDZ2  addconstraintXXXXXprimarykey(WDZ2ID);altertableWDZ2  addconstraintXXXforeignkey(WDZ1ID)  referencesWDZ1(WDZ1ID);1。3。插入数据表到住表begininsert  intowdz1values(1,'aa');insert  intowdz1values(2,'aa2');insert  intowdz1values(3,'aa3');insertintowdz2values(10,3,'wdz3--1');commit;en

3、d;1。4。在一个数据库seeesion里面插入数到从表,但是不提交事务begin  updatewdz2  setmemo='updatewdz2momo'  wherewdz2id=10;insertintowdz2values(20,2,'wdz2--1');end;对从表进行插入/修改记录,施加的锁也就是行级锁1。5。在另外一个数据库seeesion里面删除主表数据deletefromwdz1wherewdz1id=1这时候程序会死锁,除非上面的对从表的数据操作提交事务或者回滚事务。2。具体原因分析一个数据表的外键主要有3种方式来维护它自己和主表数据的一致性。(1)deletecasc

4、ade例子如下:altertableWDZ2  addconstraintXXXforeignkey(WDZ1ID)  referencesWDZ1(WDZ1ID)ondeletecascade;(2)Setnull例子如下:altertableWDZ2  addconstraintXXXforeignkey(WDZ1ID)  referencesWDZ1(WDZ1ID)ondeletesetnull;(3)Noaction注意,这是oracle外键使用时候的默认选项。例子如下:altertableWDZ2  addconstraintXXXforeignkey(WDZ1ID)  refere

5、ncesWDZ1(WDZ1ID);以前出现死锁主要是我们认为,在1。4。会对数据表wdz2进行施加行级锁,但是从表(wdz2)的外健是Noaction,删除主表(wdz1)不会去访问从表,更不会去锁定wdz2表的记录或者对整个数据从表(wdz2)施加表级锁。事实上oralce的Noaction选项的字面意思欺骗了我们,oracle在删除主表的时候会去寻找所有以主表的主键作为外键的数据表,然后看去看从表是否有该外键的索引,如果没有则会对整个从表施加表级锁,然后对从表进行全表扫描。当然如果从表存在外键的索引,会去访问对应的索引,而不会对从表本身进行加锁。3。解决办法为从表的外键建立索引,这也是在使

6、用外键的推荐方式。这样就能避免上面出现的问题了。如果在事务中执行了一条不满足条件的update语句,则执行全表扫描,把行级锁上升为表级锁,多个这样的事务执行后,就很容易产生死锁。预备知识:DDL(DATABASEDEFINITIONLANGUAGE):数据库定义语言,如createtable、droptable.....DML(DATABASEMODIFICATIONLANGUAGE):数据库修改语言,如insert、delete、update......参考资料:Oracle8Administrator'sGuide,Release8.0Oracle8Tuning,Release8.0ORA

7、CLE锁具体分为以下几类:1.按用户与系统划分,可以分为自动锁与显示锁自动锁:当进行一项数据库操作时,缺省情况下,系统自动为此数据库操作获得所有有必要的锁。显示锁:某些情况下,需要用户显示的锁定数据库操作要用到的数据,才能使数据库操作执行得更好,显示锁是用户为数据库对象设定的。2.按锁级别划分,可分为共享锁与排它锁共享锁:共享锁使一个事务对特定数据库资源进行共享访问——另一事务也可对此资源进行访问

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。