【IT168 技术文档】

介绍

本文我们尝试总结在多个用户并发情况下,如何识别和解决删除操作期间发生的死锁问题,在开始之前,我们先简单描述一下什么是死锁以及什么东西会导致死锁。

死锁

在任何数据库中发生死锁都是不愉快的,即使是在一个特殊的情况下发生也是如此,它们会减小应用程序的接受程度(ACCEPTANCE),因此避免并正确解释死锁是非常重要的。

当两个或更多用户相互等待锁定的数据时就会发生死锁,发生死锁时,这些用户被卡住不能继续处理业务,Oracle自动检测死锁并解决它们(通过回滚一个包含在死锁中的语句实现),释放掉该语句锁住的数据,回滚的会话将会遇到Oracle错误“ORA-00060:等待资源时检测到死锁”。

是什么导致了死锁?

明确地锁定表是为了保证读/写一致性,未建立索引的外键约束,在相同顺序下表不会锁住,没有为数据段分配足够的存储参数(主要是指INITTRANS,MAXTRANS和PCTFREE参数)很容易引发突发锁和死锁,原因是多种多样的,需要重新逐步审查。

识别死锁

当Oracle数据库检测到死锁时(Oracle错误消息:ORA-00060),相应的消息就写入到警告日志文件中(alert.log),另外还会在USER_DUMP_DEST目录下创建一个跟踪文件,分析警告日志文件和跟踪文件是非常耗时的。

下面是一个警告日志文件示例:

Mon Aug 07 09:14:42 2007

ORA-000060: Deadlock detected. More info in file

e:\oracle\admin\GEDEON\udump\ORA01784.TRC.

下面是从跟踪文件中节选出来的片段,从其中我们可以看出是哪个语句创造了死锁,相关的语句和被锁定的资源已经标记为粗体。

/users/ora00/log/odn_ora_1097872.trc

Oracle9i Enterprise Edition Release 9.2.0.8.0 - 64bit Production

With the Partitioning, OLAP and Oracle Data Mining options

JServer Release 9.2.0.8.0 - Production

ORACLE_HOME = /soft/ora920

System name:AIX

Node name:beaid8

Release:2

Version:5

Machine:00C95B0E4C00

Instance name: ODN

Redo thread mounted by this instance: 1

Oracle process number: 17

Unix process pid: 1097872, image: oracle@beaid8 (TNS V1-V3)

*** 2007-06-04 14:41:04.080

*** SESSION ID:(10.6351) 2007-06-04 14:41:04.079

DEADLOCK DETECTED ( ORA-00060 )

The following deadlock is not an ORACLE error. It is a

deadlock due to user error in the design of an application

or from issuing incorrect ad-hoc SQL. The following

information may aid in determining the deadlock:

Deadlock graph:

---------Blocker(s)-------- ---------Waiter(s)---------

Resource Name process session holds waits process session holds waits

TM-00001720-00000000 17 10 SX 16 18 SX SSX

TM-0000173a-00000000 16 18 SX 17 10 SX SSX

session 10: DID 0001-0011-00000002session 18: DID 0001-0010-00000022

session 18: DID 0001-0010-00000022session 10: DID 0001-0011-00000002

Rows waited on:

Session 18: obj - rowid = 00001727 - AAABcnAAJAAAAAAAAA

(dictionary objn - 5927, file - 9, block - 0, slot - 0)

Session 10: obj - rowid = 00001727 - AAABcnAAJAAAAAAAAA

(dictionary objn - 5927, file - 9, block - 0, slot - 0)

Information on the OTHER waiting sessions:

Session 18:

pid=16 serial=2370 audsid=18387 user: 21/ODN

O/S info: user: mwpodn00, term: unknown, ospid: , machine: beaida

program: JDBC Thin Client

application name: JDBC Thin Client, hash value=0

Current SQL Statement:

DELETE FROM ODNQTEX WHERE EX_ID = :B1

End of information on OTHER waiting sessions.

Current SQL statement for this session:

DELETE FROM ODNQTFN WHERE FN_ID_EXIGENCE_EX = :B1

----- PL/SQL Call Stack -----

object line object

handle number name

7000000135f7fd8 34 procedure ODN.ODNQPDR

7000000135f89f0 16 procedure ODN.ODNQPZB

我们可以使用企业管理器来决定保留所有的锁还是释放掉它们,为了便于说明,我们打开2个sqlplus实例会话(在此期间同时发生了死锁)来一起调式,当每个语句执行完毕后,我们看到锁仍然保留下来了,它可以帮助我们识别出是哪个资源引起的死锁。

下面列出了可以帮助我们监视锁的视图:

可以通过查询V$LOCK字典视图来确定锁,如:

select * from v$lock ;

下面的SQL查询可以用于确定锁住数据库对象的锁:

select

c.owner,

c.object_name,

c.object_type,

b.sid,

b.serial#,

b.status,

b.osuser,

b.machine

from

v$locked_object a ,

v$session b,

dba_objects c

where

b.sid = a.session_id

and

a.object_id = c.object_id;

并发访问oracle数据库的数据死锁分析和解决措施,解决Oracle数据库死锁相关推荐

  1. clair、anchore、trivy开源数据库的数据来源分析

    数据来源分析 trivy trivy 分了四个仓库进行维护,分别是 trivy 负责提供cli交互程序 trivy-db 负责将处理好的数据打包成blot格式 vlun-list 负责存放处理好的原始 ...

  2. oracle稽核错数据,監督與合規稽核 - Oracle SuperCluster M7 系列安全指南

    監督與合規稽核 在雲端環境中主動進行監督與記錄非常重要,在許多情況下,有助於減輕源自安全漏洞和弱點的攻擊.無論是針對合規報告或未預期事件回應,監督與稽核都是雲端提供者的重要功能,用戶組織必須強制施行良 ...

  3. 创建选修专业表oracle,数据库及数据表的创建与删除 (Oracle实验)

    实验目的 在数据库中,基本表用于存储数据:视图是虚表,在数据库中只存储视图定义(物化视图除外),通过视图可以查询.更新基本表中的数据:索引主要用于提高存取效率.通过本次实验,可以掌握基本表.视图.索引 ...

  4. mysql数据库插入数据为空_用java向mysql数据库中插入数据为空

    利用java面向对像编程,向数据库中插入数据时.遇到插入的数据为空的情况.在此做一小结: 1.数据库连接正正常 2.sql语句没有问题 3.程序没有报异常 4.代码: import java.util ...

  5. python删除数据库的数据完整代码_轻松掌握Python对数据库的增、删、改、查

    上节课我们讲解了Python操作数据库的一些基础内容,并带大家搭建了基础运行环境.安装了MySQL依赖包,并且我们还连接数据库做了查询操作. 如果没有学习上篇文章的同学建议回顾一下:全栈:Centos ...

  6. sqlserver数据库进行数据和结构比较和同步 Visual Studio2017 数据库架构比较

    2019独角兽企业重金招聘Python工程师标准>>> 打开VS>工具>SQL Server>新建数据比较/新建架构比较. 转载于:https://my.oschi ...

  7. Oracle如何实现创建数据库、备份数据库及数据导出导入的一条龙操作

    Oracle中对数据对象和数据的管理,无疑都是使用PL/SQL Developer来进行管理,该工具也提供给我们很多方便.快捷的操作,使得我们不再为Oracle本身丑陋.难用的UI而抱怨.由于我们一般 ...

  8. 国产服务器(麒麟操作系统),springboot应用并发访问redis数据错乱解决方案

    问题描述: 国产服务器,麒麟操作系统进行部署springboot应用的时候,压测并发访问redis 服务出现数据错乱情况,比如Key A的数据给了KeyB,Key B的值给了KeyC等,导致系统不可用 ...

  9. oracle性能优化之awr分析

    oracle性能优化之awr分析 作者:bingjava 最近某证券公司系统在业务期间系统运行缓慢,初步排查怀疑是数据库存在性能问题,因此导出了oracle的awr报告进行分析,在此进行记录. 导致系 ...

最新文章

  1. 截取视图某一段另存为部分视图(Partial View)
  2. jdbc封装mysql_用Java手动封装JDBC连接池(一)
  3. 因云而生 | 阿里云发布云服务器操作系统Alinux3
  4. Mybatis下collections使用pageHelper进行分页
  5. android build.time,Android SDK中的恒定Build.TIME
  6. 22Exchange Server 2010跨站点部署-邮件流测试及重定向
  7. 监管大屏系统_“警视” 警务情指一体大屏可视化决策系统
  8. MediaCodec解码aac
  9. android studio简单的密码日记本,实现增删改查功能
  10. 雷云3启动无响应解决办法
  11. 编译安装wpa_supplicant
  12. 贪心算法之猴子吃香蕉(Monkeys and Bananas)
  13. 如何通俗理解设计模式及其思想
  14. Atitit q2016 qb doc list on home ntpc.docx
  15. Cilium 开源 Tetragon – 基于 eBPF 的安全可观测性 运行时增强
  16. CANopen总线的协议详解
  17. 恶意.NET安全攻防(一):使用ETW隐藏你的.NET
  18. 34.发送ICMP时间戳请求
  19. 使用python爬取中国电影票房数据并写入csv文件
  20. 南邮 OJ 1055 叙拉古猜想

热门文章

  1. ThinkPHP5 如何介入阿里云反文本垃圾敏感词过滤【附源码】
  2. centOS7系统虚拟机节点的搭建
  3. 【原】个人对win7开机黑屏只有鼠标排障总结
  4. 机器学习实战 | emojify 使用Python创建自己的表情符号(深度学习初级)
  5. 口罩形势下的医院财务管理
  6. mysql linestringfromwkb_WKTWKB 笔记一:格式介绍
  7. 获取京东的eid和fp
  8. HBsae与时空索引技术杂谈
  9. 基于低代码平台的知识管理系统,帮助实现智能化企业管理
  10. 修改注册表后不重启计算机,win10系统实现修改注册表不用重启就能生效的修复技巧...