`

oracle外键引起的死锁

 
阅读更多

 

今天系统测试的时候,发现经常发送oracle的死锁,然后我打开pl/sql看是两张表;再细看它们是主从表关系。

具体的表信息如下:

 

-- 主表
create table LABLEINFOS_TABLE
(
  LABLE_ID   VARCHAR2(38) not null,
  LABLE_NAME VARCHAR2(200) not null,
  CREATOR    VARCHAR2(38) not null,
  CREATETIME DATE not null,
  EDITOR     VARCHAR2(38),
  EDITTIME   DATE,
  constraint PK_LABLEINFOS_TABLE primary key (LABLE_ID)
);

 

 

-- 从表
create table SCHEME_LABLE_RERATION_TABLE
(
  ID           VARCHAR2(38) not null,
  LABLE_ID     VARCHAR2(38),
  MA_SD_SEQ_ID VARCHAR2(38) not null,
  CREATOR      VARCHAR2(38),
  CREATTIME    DATE,
  constraint PK_SCHEME_LABLE_RERATION_TABLE primary key (ID)
);
alter table SCHEME_LABLE_RERATION_TABLE
  add constraint FK_SCHEME_L_REFERENCE_LABLEINF foreign key (LABLE_ID)
  references LABLEINFOS_TABLE (LABLE_ID);
 

 

有两存储过程需要对这两张表进行DML操作。

 

我记得tom说过:”不加索引的外键是死锁的头号原因“。

 

大概的原因知道了之后,我先把外键给删除了进行测试,果然不会发送死锁了。

 

现在把Tomas Keyte的书《Oracle 9i & 10g编程艺术》(强烈推荐)上的内容记录如下:

 

 

据Tomas 的经验,导致死锁的头号原因是外键未加索引(第二号原因是表上的位图索引遭到并发更新)。在以下两种情况下,Oracle在修改父表后会对子表加一个全表锁:

 

  • 如果更新了父表的主键(倘若遵循关系数据库的原则,即主键应当是不可变的,这种情况就很少见。)由于外键上没有索引,所以子表会被锁住。
  • 如果删除了父表中的一行,整个子表也会被锁住(由于外键上没有索引,比如:如果EMP表有DEPT的一个外键,而且在EMP表的DEPTNO列上没有任何索引,那么更新DEPT时整个EMP表都会被锁定)。
除了全表锁外,在以下情况下,未加索引的外键也可能带来问题:
  • 如果有on delete cascade,而且没有对子表加索引:例如,emp是dept的子表,delete deptno=10应该cascade(级联)至emp。如果emp中的deptno没有索引,那么删除dept表中的每一行时都会对emp做一次全表扫描。这个全表扫描可能是不必要的,而且如果从父表删除多行,父表中每删除一行就要扫描仪一次子表。
  • 从父表查询子表:在此考虑emp/dept例子。利用deptno查询emp表是相当常见的。如果频繁地运行以下查询,你就会发现没有索引会使查询速度变慢:select * from dept, emp where emp.deptno=dept.deptno and dept.deptno=:x;

-EOF-

 

  • 大小: 8.1 KB
1
2
分享到:
评论

相关推荐

    Oracle外键不加索引引起死锁示例

    本文将深入探讨Oracle外键不加索引引起死锁的情况,并提供解决方案。 首先,我们需要理解外键和主键的关系。在关系型数据库中,主键是表中的一个或一组列,其值唯一标识表中的每一行。外键则是另一表中指向主键的...

    oracle死锁表后处理

    "oracle死锁表后处理" oracle死锁表后处理是指在oracle数据库中处理死锁表的各种方法和技巧。oracle死锁表后处理是数据库管理员和开发人员需要掌握的重要技能,旨在解决oracle数据库中出现的死锁问题,确保数据的...

    Oracle 死锁处理

    - 为从表的外键字段创建索引,这样Oracle在检查外键约束时可以高效地访问,避免全表扫描和锁升级,从而减少死锁的可能性。 - 监控和检测死锁:使用`v$session_wait`视图或`DBA_BLOCKERS`视图来检测死锁,并使用`...

    oracle 本科教学ppt

    还将介绍数据类型、主键和外键等关系数据库设计的基础概念。 四、数据库安全性 Oracle提供了强大的用户权限管理机制,包括用户账户的创建与管理,角色的定义,以及权限的分配和撤销。安全性的概念是学习Oracle的...

    Oracle 11R2 官方文档(中英对照版,PDF)

    - **死锁检测和避免**:系统自动检测并解决死锁情况。 5. **分区**: - **分区技术**:包括范围分区、散列分区、列表分区和复合分区,提高大规模数据的管理效率和查询性能。 6. **PL/SQL和Java**: - **PL/SQL*...

    ORACLE设计案例精编

    8. **并发控制**:学习Oracle的锁定机制、事务管理和并发控制,理解死锁问题及其解决办法。 9. **安全性管理**:了解用户权限管理、角色分配、审计机制,以及如何设置安全策略防止未授权访问。 10. **高可用性与...

    oracle课件

    4. 事务处理与并发控制:理解事务的概念,学习如何控制事务的提交和回滚,以及Oracle的锁定机制和死锁处理。 5. 性能优化:通过实验了解SQL查询优化,使用 Explain Plan 分析查询执行计划,调整索引和表分区,以及...

    oracle 锁及并发性

    - 结果:会话1和会话2都将被阻塞,Oracle将检测到死锁,并报告ORA-00060错误。 #### 八、Update句中尽量不包含主键的列 当更新父表中的主键(即使值不变),子表的相关操作(如插入或更新记录)会被阻塞。同样地...

    Oracle 11g For Dummies

    书中将指导你如何规划和创建数据库模式,包括主键、外键和唯一性约束的设置。此外,你还将学习到索引的使用,以优化查询性能。 安装和配置Oracle 11g也是学习的一部分。这个过程涉及选择合适的安装选项、配置网络...

    Oracle 11g视频教程(窗内网)

    Oracle 11g提供了一致性保证和死锁避免机制,理解事务的ACID属性(原子性、一致性、隔离性和持久性),以及行级锁定和多版本并发控制(MVCC)原理,对于提升系统并发性能至关重要。 最后,Oracle 11g还支持高级特性...

    Oracle和数据结构

    3. 列(Column):列定义了表中的字段,每个列都有一个名字、数据类型和可能的约束条件,如非空(NOT NULL)、主键(PRIMARY KEY)或外键(FOREIGN KEY)。 4. 索引(Index):索引是提高查询速度的关键,它创建在...

    oracle数据库开发规范.pdf

    5. Oracle的锁定机制和死锁检测。 6. Oracle的SQL语句中的绑定变量(如:x)用于提高性能和安全性。 7. Oracle的SQL语句中可以使用日期函数(如TO_DATE)和数学函数。 8. Oracle的跟踪文件(trace files)用于诊断...

    Oracle高效设计

    这部分内容会讲解Oracle的锁定机制,死锁的预防和解决,以及多版本并发控制(MVCC)在Oracle中的实现。事务管理则包括事务的ACID属性,以及提交和回滚操作的细节。 最后,书中可能还会包含一些实战案例和最佳实践,...

    Oracle学习word文档和PPT

    1. 锁机制:理解Oracle中的行级锁、表级锁和多版本并发控制(MVCC),以及死锁的概念和处理。 2. 事务管理:掌握ACID特性,理解提交、回滚和保存点的概念。 通过Word文档,你可以详细阅读Oracle的理论知识,而PPT...

    Oracle 课程设计案例精编

    6. **事务和并发控制**:理解事务的ACID特性(原子性、一致性、隔离性、持久性),以及Oracle中的锁定机制和死锁处理。 7. **备份与恢复**:学习如何进行数据库备份,理解完整备份、增量备份和差异备份的区别,以及...

    Oracle9i的数据库管理, Oracle9i数据库对象的管理,Oracle9i数据库的安全性,Oracle9i数据库的完整性和并发控制等

    Oracle9i支持实体完整性(如主键约束)、参照完整性(外键约束)和用户定义的完整性(如检查约束)。此外,Oracle9i还提供了行级锁定和事务管理,以确保在并发操作中维持数据完整性。 5. **Oracle9i的并发控制**: ...

    Oracle 9i 简明教程轻松实战20天

    8. **并发控制**:学习Oracle的事务处理和并发控制机制,包括锁定、死锁和行级锁定的概念,以及多版本并发控制(MVCC)如何解决读写冲突。 9. **数据库备份与恢复**:掌握Oracle的备份策略,包括冷备份、热备份、...

    oracle 参考手册

    2. **表的创建与管理**:包括CREATE TABLE语句的使用,定义字段的数据类型,约束条件(如主键、外键、唯一性约束、非空约束等)以及如何使用ALTER TABLE修改已存在的表结构。 3. **索引**:索引能显著提高查询性能...

    Oracle经典面试题(个人精心收集,值得收藏)

    - 创建和管理表,包括定义主键、外键、唯一性约束和检查约束。 - 学习如何使用ALTER TABLE修改已存在的表结构。 4. **存储过程和函数** - PL/SQL是Oracle的编程语言,用于编写存储过程、函数和触发器。 - 理解...

Global site tag (gtag.js) - Google Analytics