• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >oracle > Oracle数据表中的死锁情况解决方法

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

作者:ttzztt 字体:[增加 减小] 来源:互联网 时间:2017-05-11

ttzztt通过本文主要向大家介绍了oracle数据库死锁解决,oracle 死锁,oracle 死锁查询,oracle死锁处理,oracle 查看死锁等相关知识,希望本文的分享对您有所帮助

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

2016121172119573.png (729×142)

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

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' ;
</div>

或

 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;
</div>

2016121172247492.png (825×281)

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

select sid,serial# from v$session where username='center';
</div>

2016121172326498.png (510×108)

b.通过系统用户确定

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

</div>

2016121172352758.png (544×108)

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

alter system kill session ‘123,3935';
</div>

2016121172503640.png (346×75)

2016121172524500.png (781×119)

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

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

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

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • oracle密码过期的彻底解决方案
  • Oracle安装遇到INS-30131错误的解决方法
  • 讲解Oracle数据库中结束死锁进程的一般方法
  • Oracle数据表中的死锁情况解决方法
  • 简单说明Oracle数据库中对死锁的查询及解决方法
  • Oracle数据库并行查询出错的解决方法
  • 登录oracle数据库时密码忘记的解决方法
  • oracle 数据库数据迁移解决方案
  • Oracle数据库账号被锁定解决方法
  • oracle查询锁表与解锁情况提供解决方案

相关文章

  • 2017-05-11oracle 会话 死锁 执行sql 执行job的方法
  • 2017-05-11Oracle9i 动态SGA,PGA特性探索
  • 2017-05-11oracle异常(预定义异常,自定义异常)应用介绍
  • 2017-05-11oracle误删数据表还原的二种方法(oracle还原)
  • 2017-05-11Oracle 数据库导出(exp)导入(imp)说明
  • 2017-05-11怎么才能限制SQL Server只能让指定的机器连接
  • 2017-05-11ORACLE查询删除重复记录三种方法
  • 2017-05-11Oracle数据库密码文件的使用与维护
  • 2017-05-11oracle查看会话锁定的所有对象代码分享
  • 2017-05-11Oracle文本函数简介

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • oracle drop table(表)数据恢复方法
    • 探讨Oracle中的&号问题
    • Oracle 监听器密码设置方法(LISTENER)
    • Linux中Oracle的sqlplus下退格和Del键无效的问题解决
    • oracle 创建表空间详细介绍
    • oracle 常见等待事件及处理方法
    • oracle截取字符(substr)检索字符位置(instr)示例介绍
    • Oracle开发之窗口函数
    • PDO取Oracle lob大字段,当数据量太大无法取出的问题的解决办法
    • oracle ORA-00031:session marked for kill(标记要终止的会话)解决方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有