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

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;

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

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;

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

a.通过oracle用户确定

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

b.通过系统用户确定

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

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

alter system kill session ‘123,3935';

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

oracle rac 死锁检测机制rac环境下,死锁的检查是通过LMD进程来完成的,该进行默认情况下是60s 工作一次,也就是说死锁的检查至少需要1分钟甚至更长的时间,跟系统负载有关。

另外就是rac环境下,死锁的检测要在所有节点之间来回的通信,所以相对单机环境下,就要慢很多。其中隐含参数_lm_dd_interval 控制LMD工作的频率(一般情况下,不要调整该参数)

如何避免死锁?对应oracle内部死锁,oracle自己会进行处理,但是由于应用方面导致的死锁或人为导致的死锁,那么需要进行人工干预。

Oracle死锁产生的四个必要条件如下:

1)资源不能被共享,只能由一个进程使用。

2)已经得到资源的进程可以再次申请新的资源。

3)已经分配的资源不能从相应的进程中被强制地剥夺。

4)系统中若干进程组成环状,环状中每个进程都在等待相邻进程正占用的资源。

oracle 如何形成死锁,Oracle数据表中的死锁情况解决方法相关推荐

  1. 金蝶KIS标准版 运行时错误 ‘3800‘: ‘PrimaryKey‘ 不是此表中的一个索引 解决方法

    金蝶KIS标准版 运行时错误 '3800': 'PrimaryKey' 不是此表中的一个索引. 问题原因:账套数据库表GLVch 丢失主键. 金蝶KIS标准版,凭证查询,提示"运行时错误'3 ...

  2. mysql删除表中的一列数据_在数据表中添加或删除一列

    注意: 我们希望能够尽快以你的语言为你提供最新的帮助内容. 本页面是自动翻译的,可能包含语法错误或不准确之处. 我们的目的是使此内容能对你有所帮助. 可以在本页面底部告诉我们此信息是否对你有帮助吗? ...

  3. Oracle存储过程中如何根据指定的参数判断该参数的值否存在数据表中:

    摘要:最近项目中用到了Oracle存储过程,所以就自己尝试着写了下,下面我把我遇到的问题描述一下:就是在我处理解析Clob字段中的xml字符串的时候,有个需求就是根据指定的主键参数,来判断该参数的值是 ...

  4. Oracle中通过存储过程,Function,触发器实现解析时间类型的字段并插入的对应的数据表中...

    摘要:之前在项目中解决了插入字符串类型的数据,今天试着写了一个插入date类型的字段,成功了,现在记录一下,以便以后查看: 一:首先建立一个根据xml节点名称获取对应的xml值的Function.sq ...

  5. oracle中修改多个字段默认值_利用VBA代码在已有的数据表中删除、添加、修改字段...

    大家好,今日继续给大家讲解VBA数据库解决方案的第21讲,如何利用VBA代码在已有的数据表中删除,添加,修改字段.这个内容是操作数据库的一项必修的内容,还望大家在实际工作中多利用,所以这节的知识,对于 ...

  6. Oracle使用游标查询所有数据表备注

    功能作用:应用对应的SQL语句,能方便快速的查询Oracle数据库指定用户的所有用户表说明,快速知道每个数据表是做什么的,方便写文档和方案. 运行环境:搭建好Oracle数据库,并使用PQ/SQL D ...

  7. Oracle数据库表中字段顺序的修改方法

    Oracle数据库表中字段顺序的修改方法 这篇文章主要给大家介绍了关于Oracle数据库表中字段顺序的修改方法,在介绍修改的方法之前先给大家介绍了Oracle数据库表新建字段的方法,文中通过示例代码介 ...

  8. 删除数据表中的重复行

    原表数据 select subscrbid, prcplnid,min(begtime),min(endtime),count(*) from NEW_TRAIN_TAB_SUBSCRBPRCPLN ...

  9. oracle查询数据都是问号,Oracle数据库PL/SQL Developer查询结果显示问号乱码的解决方法...

    PL SQL Developer,查询结果中的中文变成了一堆问号,SQL语句中的中文被提示invalid character,不能识别. 解决方法: 执行,select userenv('langua ...

最新文章

  1. python创建对象的格式为_Python入门基础学习(面向对象)
  2. 江南大学人工智能与计算机学院拟录取名单,江南大学人工智能与计算机学院关于接收2021级硕士研究生调剂的通知...
  3. PAT乙级-1063. 计算谱半径(20)
  4. Java枚举的小用法
  5. Leetcode 201. 数字范围按位与 解题思路及C++实现
  6. UITabBarController 和 UINavigationController 的详解
  7. 安装mysql8.0.20,报错“找不到VCRUNTIME140_1.dll”
  8. java jsp ajax_ajax的json传值方式在jsp页面中的应用
  9. vmwaretools安装
  10. python刷题技巧_【python刷题】分治法
  11. threejs获取模型坐标_Threejs倒影实现解析
  12. 12月14日习题答案大剖析!html5基础测试来啦
  13. 是谁在我的心里打了个结(二十一)托付
  14. win7下用docker部署的基于openvino的yolov5算法(三)yolov5 v4.0环境安装以及.pt转成.ir模型
  15. [C#]关于逆变与协变的基本概念和修饰符in与out的意义
  16. JavaScript 必会的知识点
  17. 【悟空】恍恍惚惚进入软件测试行业
  18. 关于Ubuntu下浏览器不能上网但是能ping通网络的问题
  19. 《算法谜题》-第二章 谜题
  20. 移动端开发使用rem时动态设置html的字体大小

热门文章

  1. 针对提高48V 配电性能的诸多思考!
  2. 图文+动画讲解排序算法总结!!
  3. 测试功能范围_软件测试难学吗?
  4. html提现页面模板,提现记录.html
  5. 分布式任务调度平台一站式讲解
  6. uni-app中使用腾讯位置服务实现小程序地图选点功能
  7. RabbitMQ控制台详解
  8. java.io.IOException 权限不够
  9. SpringBoot项目去除druid监控的底部广告
  10. SonarQube开机自启动