Oracle数据表中的死锁情况解决方法

作者:ttzztt 时间:2024-01-15 11:23:01 

在进行数据库管理的过程中,经常会出现数据表被用户的一些不合理操作而导致表被锁定的情况,以下主要介绍如何查找哪些表被哪个用户所锁定,以及如何解除锁定:
1.查找被锁定的表:


select object_name,session_id,os_user_name,oracle_username,process,locked_mode,status
from v$locked_object l, all_objects a
where l.object_id=a.object_id;

Oracle数据表中的死锁情况解决方法

如果想知道具体是哪个进程阻塞了哪个进程,可用以下语句查看:


select username,v$lock.sid,trunc(id1/power(2,16)) rbs,bitand(id1,to_number('ffff','xxxx'))+0 slot,id2 seq,lmode,request from v$lock, v$session where v$lock.type = 'TX' and v$lock.sid = v$session.sid and v$session.username = 'CENTER' ;



select
(select username||':'||sid||':'||serial# from v$session where sid=a.sid) ||
' 阻塞了 ' ||
(select username ||':'||sid||':'||serial# from v$session where sid=b.sid)
from v$lock a, v$lock b
where a.block = 1
and b.request > 0
and a.id1 = b.id1
and a.id2 = b.id2;

Oracle数据表中的死锁情况解决方法

2.确定锁定表用户的sid与serial编号(可通过oracle用户确定也可通过系统用户确定)
a.通过oracle用户确定


select sid,serial# from v$session where username='center';

Oracle数据表中的死锁情况解决方法

b.通过系统用户确定


select sid,serial# from v$session where username='administrator';

Oracle数据表中的死锁情况解决方法

3.杀掉造成死锁的进程(已知是123阻塞了124号进程,杀掉即可解锁)


alter system kill session ‘123,3935';

Oracle数据表中的死锁情况解决方法

Oracle数据表中的死锁情况解决方法

至此表死锁解除,现在存在的是数据表正常的锁定,等事务提交后自然消失.

oracle rac 死锁检测机制
rac环境下,死锁的检查是通过LMD进程来完成的,该进行默认情况下是60s 工作一次,也就是说死锁的检查至少需要1分钟甚至更长的时间,跟系统负载有关。
另外就是rac环境下,死锁的检测要在所有节点之间来回的通信,所以相对单机环境下,就要慢很多。其中隐含参数_lm_dd_interval 控制LMD工作的频率(一般情况下,不要调整该参数)

如何避免死锁?
对应oracle内部死锁,oracle自己会进行处理,但是由于应用方面导致的死锁或人为导致的死锁,那么需要进行人工干预。
Oracle死锁产生的四个必要条件如下:
1)资源不能被共享,只能由一个进程使用。
2)已经得到资源的进程可以再次申请新的资源。
3)已经分配的资源不能从相应的进程中被强制地剥夺。
4)系统中若干进程组成环状,环状中每个进程都在等待相邻进程正占用的资源。

标签:Oracle,死锁
0
投稿

猜你喜欢

  • 浏览器右下角弹出提示窗口

    2008-10-30 12:37:00
  • JavaScript获取一个范围内日期的方法

    2024-04-28 09:50:33
  • Python入门基本操作列表排序用法详解

    2021-01-02 15:42:02
  • js判断数组key是否存在(不用循环)的简单实例

    2024-04-17 10:40:35
  • 利用python实现简单的情感分析实例教程

    2021-12-27 18:19:42
  • python爱心表白 每天都是浪漫七夕!

    2023-02-26 20:36:55
  • 配置Git并从GitHub上克隆项目

    2023-03-13 12:38:16
  • 一文带你了解Python中的type,isinstance和issubclass

    2023-05-10 22:54:20
  • MySQL之select、distinct、limit的使用

    2024-01-22 04:41:20
  • Oracle数据库的备份及恢复策略研究

    2010-07-16 12:54:00
  • python实现多进程通信实例分析

    2023-04-08 19:44:05
  • pandas库中 DataFrame的用法小结

    2021-08-11 00:54:01
  • 详细介绍基于MySQL的搜索引擎MySQL-Fullltext

    2024-01-27 16:30:30
  • 基于canvas的二维码邀请函生成插件

    2024-04-17 10:40:53
  • SQL Server DATEDIFF() 函数用法

    2024-01-17 16:18:16
  • 有关数据库SQL递归查询在不同数据库中的实现方法

    2024-01-28 00:40:15
  • Golang实现http server提供压缩文件下载功能

    2024-05-09 14:56:00
  • mysql中 datatime与timestamp的区别说明

    2024-01-21 14:45:53
  • Tensorflow tf.dynamic_partition矩阵拆分示例(Python3)

    2021-07-10 10:35:25
  • SQL窗口函数之聚合窗口函数的使用(count,max,min,sum)

    2024-01-21 00:56:09
  • asp之家 网络编程 m.aspxhome.com