`
linsea
  • 浏览: 90775 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

ORACLE 死锁实验

阅读更多

环境:  DB: ORACLE 10.2   OS : RHEL 4
SQL> show user;
USER 为 "SCOTT"

SQL> select * from deptbak;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

SQL> set autocommit off;

SQL> update deptbak set deptno=44 where deptno=40;

已更新 1 行。

=====================================
此时再打开另一个sqlplus,进行如下操作:
[oracle@localhost ~]$ sqlplus / as sysdba

SQL> show user;
USER 为 "SYS"

SQL> set autocommit off

SQL> select * from scott.deptbak;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

SQL> update scott.deptbak set deptno=33 where deptno=30;

已更新 1 行。
===================================
回到第一个sqlplus中执行如下语句:
SQL> update deptbak set deptno=31 where deptno=30;
此时此会话将会一直阻塞,因为它得不到第二个会话持有的这一行的排他锁.

===================================
再回到第二个sqlplus中,执行如下语句:

SQL> update scott.deptbak set deptno=41 where deptno=40;
update scott.deptbak set deptno=41 where deptno=40
             *
第 1 行出现错误:
ORA-00060: 等待资源时检测到死锁

!!!!!!!!!!!!!!!!!!!!!!!这里系统自动地检测出了死锁,这时需要我们人为地提交事务!!!!

SQL> commit;

提交完成。

查询下数据:
SQL> select * from scott.deptbak;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        33 SALES          CHICAGO
        40 OPERATIONS     BOSTON

 

======================================
第二个会话提交完成后,第一个会话将不再阻塞,显示如下:

SQL> update deptbak set deptno=31 where deptno=30;
已更新0行。!!!!!!!!!!!!!!!!!!!!!!! 注意 : 没有更新本行,为什么???(稍后说明)!!!!!!!!!!!!!!!!!!!!!!
再来查询一下数据
SQL> select * from deptbak;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        33 SALES          CHICAGO
        44 OPERATIONS     BOSTON

 

特别说明:
第一个会话的第二条更新没有生效,原因是更新时有"一致读"和"当前读",
当发现数据当前读和一致读不相同时,oracle就知道此数据已经由别人
修改了,这条数据不再是之前想修改的数据了,为了避免出现问题,将
不进行更新.
更详细的解释,参考Kyte的书的相关章节.

分享到:
评论

相关推荐

    BLOG_Oracle_lhr_Oracle死锁的分类及其模拟.pdf

    【Oracle死锁的分类及其模拟】这篇博客主要探讨了Oracle数据库中的死锁问题,包括死锁的基本概念、分类以及如何进行模拟。以下是该主题的详细解释: **死锁概述** 死锁是数据库系统中常见的问题,它发生在两个或多...

    Oracle9i实验的答案:作为Oracle9i实验指导书的详细答案

    实验应涉及锁定的概念,以及如何在实践中处理死锁问题。 九、数据仓库与OLAP Oracle9i支持数据仓库构建和在线分析处理(OLAP)。实验可能包括创建星型和雪花模型,以及使用SQL的聚合函数和分析函数进行复杂的数据...

    Oracle实验报告.rar

    这份"Oracle实验报告.rar"包含了一学期的Oracle实验所有内容,总计16个DOC文档,可能包括实验指导、实验步骤、实验结果分析以及相关的编程示例。这些文档对于学习和理解Oracle数据库系统的核心概念和技术具有很高的...

    Oracle数据库实验指导手册.doc

    8. **故障排查**:通过实验,学生需要学习如何识别和解决常见的数据库问题,如锁定、死锁、资源争用等,并掌握日志分析和错误诊断的方法。 9. **实验报告撰写**:实验报告的编写是实验的重要组成部分,它要求学生...

    Oracle实验报告.docx

    根据提供的文档信息,我们可以从这份Oracle实验报告中提取并总结出以下关键知识点: ### Oracle实验报告概述 #### 课程背景 - **课程名称**: 大型数据库系统 - **实验项目**: 数据库实验 - **实验地点**: 逸夫楼...

    Oracle18个详细实验.pdf

    实验五将介绍Oracle中不同类型的锁,如行级锁、表级锁等,并讨论它们的应用场景及如何避免死锁问题。 通过以上实验的详细分析,我们可以深入了解Oracle数据库在处理数据存储、并发控制等方面的关键技术细节,为日常...

    oracle课件

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

    太原理工大学Oracle实验报告.docx

    根据提供的文档信息,我们可以推断出这是一份关于在AIX操作系统上安装Oracle 10g的实验报告。下面将详细解析文档中的关键知识点,并基于这些信息构建一份详尽的知识点梳理。 ### 太原理工大学Oracle实验报告 #### ...

    Oracle Performance Survival Guide(oracle 性能调优指导)

    这部分将深入研究锁定、并发控制和资源争用问题,提供解决死锁、资源瓶颈和竞态条件的策略。 **PART V: OPTIMIZING MEMORY** 内存管理对Oracle数据库的性能影响巨大。这一部分会涵盖SGA(System Global Area)的...

    oracle 数据据库 老方块

    在这个压缩包中,我们可以看到一系列与Oracle数据库相关的学习资料,包括授课笔记、课堂文档和实验大纲。 1. **Oracle数据库基础**: - Oracle数据库是企业级数据库解决方案,以其稳定性、可扩展性和安全性著称。 ...

    Oracle数据库 资料学习

    6. **并发控制**:Oracle使用多版本并发控制(MVCC)来处理多个用户同时访问数据库的情况,理解事务、锁定、死锁等概念,以及如何解决并发问题。 7. **安全性**:学习如何设置用户权限,理解角色、权限、对象权限等...

    oracle数据库性能优化与内部原理解析

    6. 并发和锁定优化:监控和调整数据库的并发机制,优化锁的使用策略和死锁的处理,可减少系统资源的冲突和等待时间。 7. 实时性能监控与调整:利用Oracle提供的实时监控工具,如动态性能视图(Dynamic Performance ...

    大型数据库系统概论课件 实验7 Oracle9i数据库的完整性和并发控制.ppt

    【大型数据库系统概论】...通过这个实验,你将深入理解大型数据库系统的精髓,特别是Oracle9i在数据管理和并发控制方面的高级特性。这将为你在实际工作中设计和优化数据库系统,保证数据安全和系统性能提供坚实的基础。

    哈工大计算机数据库实验报告

    学生会学习如何使用MySQL或Oracle等常见数据库管理系统来建立一个新的数据库,并定义各个表的字段,理解主键、外键、唯一性约束等概念。此外,还会接触到数据类型,如整型、字符串、日期时间等,以及如何使用SQL语句...

    Oracle数据库锁的研究.pdf

    此外,死锁是并发访问数据库时可能出现的问题,Oracle提供了一些机制来预防和解决死锁,比如通过检测并终止死锁事务来避免资源长时间被占用。 通过实验,我们可以验证Oracle数据库中锁的功能。例如,使用两个不同的...

    oracle 学习之路1-OCP

    在实践中,你可以通过模拟实验,如创建数据库、编写PL/SQL代码、执行SQL查询、进行数据恢复等来巩固这些理论知识。Oracle学习之路1-OCP_STU_SPL.DOC这份文档将是你宝贵的参考资料,它会引导你逐步掌握Oracle数据库的...

    数据库系统第5次实验报告

    实验的目标在于深入理解Oracle中的Schema和用户的概念,掌握使用`GRANT`和`REVOKE`命令对用户权限的操作,以及熟悉事务的提交、回滚和死锁现象。 【Schema和用户权限】 在Oracle数据库中,Schema与用户有着密切的...

    oracle 9i 10g编程艺术

    - **环境配置**:指导读者如何搭建用于实验的环境,包括建立SCOTT/TIGER模式、配置SQL*Plus的AUTOTRACE、配置Statspack等。 - **核心章节**: - 第1章:讨论了开发成功Oracle应用程序的方法论,包括对Oracle体系...

Global site tag (gtag.js) - Google Analytics