`
wenlongsust
  • 浏览: 72384 次
  • 性别: Icon_minigender_1
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

Oracle外键不加索引会引起死锁问题

 
阅读更多

转载链接:http://www.jb51.net/article/50161.htm

这篇文章主要介绍了Oracle外键不加索引引起死锁的情况及解决,需要的朋友可以参考下

--创建一个表,此表作为子表

create table fk_t as select * from user_objects;

delete from fk_t where object_id is null;

commit;

--创建一个表,此表作为父表

create table pk_t as select * from user_objects;

delete from pk_t where object_id is null;

commit;

--创建父表的主键

alter table PK_t add constraint pk_pktable primary key (OBJECT_ID);

--创建子表的外键

alter table FK_t add constraint fk_fktable foreign key (OBJECT_ID) references pk_t (OBJECT_ID);

--session1:执行一个删除操作,这时候在子表和父表上都加了一个Row-S(SX)锁

delete from fk_t where object_id=100;

delete from pk_t where object_id=100;

--session2:执行另一个删除操作,发现这时候第二个删除语句等待

delete from fk_t where object_id=200;

delete from pk_t where object_id=200;

--回到session1:死锁马上发生

delete from pk_t where object_id=100;

session2中报错:

SQL> delete from pk_table where object_id=200;
delete from pk_table where object_id=200
*
第 1 行出现错误:

ORA-00060: 等待资源时检测到死锁

当对子表的外键列添加索引后,死锁被消除,因为这时删除父表记录不需要对子表加表级锁。

--为外键建立索引

create index ind_pk_object_id on fk_t(object_id) nologging;

--重复上面的操作session1

delete from fk_t where object_id=100;

delete from pk_t where object_id=100;

--session2

delete from fk_t where object_id=200;

delete from pk_t where object_id=200;

--回到session1不会发生死锁

delete from pk_t where object_id=100;



关于外键不加索引引起死锁的详细分析参考http://blog.csdn.net/robinson1988/article/details/38421991


经过验证,如果外键不加索引的确会出现死锁。因此,外键务必添加索引。


分享到:
评论

相关推荐

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

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

    Oracle 死锁处理

    如果没有为外键创建索引,Oracle会锁定整个从表进行全表扫描,这可能导致死锁。 - 锁升级:当DML操作导致全表扫描时,行级锁可能升级为表级锁,增加死锁的风险。 4. **解决办法** - 为从表的外键字段创建索引,...

    oracle索引.pdf

    Oracle数据库中的索引是提升查询效率的关键工具,但其管理和使用需要谨慎,因为不恰当的索引策略可能会带来负面影响,包括占用额外的磁盘空间、增加数据修改操作的维护成本以及可能降低数据处理速度。索引对数据插入...

    ORACLE设计案例精编

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

    Oracle高效设计

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

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

    这份官方文档的中英对照版详细阐述了Oracle数据库的核心概念和技术,包括其体系结构、索引、数据完整性和并发控制等关键方面。以下是对这些主题的深入解析: 1. **Oracle体系结构**: - **实例和数据库**:Oracle...

    oracle 锁及并发性

    Oracle通过自动检测并解除其中一个会话的锁来解决死锁问题。 **示例**: 1. 会话1锁定表T1中的记录,并尝试更新表T2中的记录。 2. 同时,会话2锁定表T2中的记录,并尝试更新表T1中的记录。 - 结果:会话1和会话2都...

    Oracle技术常见问题

    在使用Oracle技术的过程中,开发者和管理员经常会遇到各种问题。以下是一些关于Oracle技术的常见问题及其解决方案,这些问题可能涵盖了数据库的安装、配置、性能优化、故障排查、安全性以及SQL查询等多个方面。 1. ...

    oracle课件

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

    oracle 本科教学ppt

    这部分会讲解并发控制的基础知识,如读写锁、行级锁定和死锁的避免。 八、数据库复制 Oracle的复制技术,如逻辑复制(如GoldenGate)、物理复制(如Data Guard)等,能够实现数据的实时同步,提高可用性和灾难恢复...

    Oracle 11g For Dummies

    书中的这部分内容会解释这些概念,以及如何处理死锁和并发问题。 数据库性能优化是提高系统效率的关键。Oracle 11g提供了许多性能监控和调优工具,如SQL Trace、TKPROF和AWR(自动工作负载 repository)。通过学习...

    oracle 参考手册

    手册会涉及COMMIT、ROLLBACK和SAVEPOINT操作,以及锁定机制和死锁处理。 7. **PL/SQL编程**:Oracle的PL/SQL是一种过程化语言,用于编写复杂的数据库逻辑。手册会包含PL/SQL变量、条件语句、循环、异常处理等内容。...

    Oracle和数据结构

    它使用多版本并发控制(MVCC)和锁定机制来处理并发操作,防止死锁和数据不一致。 六、备份与恢复 Oracle提供多种备份和恢复策略,包括物理备份、逻辑备份、RMAN(恢复管理器)备份等。通过归档日志模式和闪回技术...

    SQL,ORACLE经典面试题

    在本节中,我们将从数据库基础、SQL 语言、视图、完整性约束、第三范式、ER 模型、索引、事务、锁、死锁、存储过程、触发器 等方面总结 SQL 和 ORACLE 面试题的知识点。 数据库基础 * 数据抽象:物理抽象、概念...

    Oracle 课程设计案例精编

    4. **表和索引**:创建、修改和删除表格,理解主键、外键和唯一性约束的概念,以及索引的作用和类型(B树、位图、函数索引等)。 5. **数据库安全性**:用户管理、权限和角色的设定,以及如何通过GRANT和REVOKE操作...

    oracle锁讲解笔记

    常见的死锁原因包括未索引的外键和位图索引的并发更新。 #### 锁升级与转换 Oracle数据库中的锁升级不是一种常规操作,但会执行锁转换或提升。这意味着锁类型可能会根据需要从较低级别升级到较高级别,以适应并发...

    oracle作业练习与答案

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,它在企业级数据存储、管理和处理中扮演着核心角色。对于初学者来说,理解Oracle的基本概念、语法和操作是至关重要的。"Oracle作业练习与答案" 提供了一个很...

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

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

    IT服务支撑人员招聘试题(2021年)含答案.docx

    - 外键未建索引可能导致死锁,影响查询性能,且破坏主外键约束。 7. **数据库查询与索引**: - 对于大型表,选择正确的索引策略至关重要,如在需要频繁查询的列上建立索引。 这些知识点涵盖了数据库管理的基础,...

Global site tag (gtag.js) - Google Analytics