Oracle数据库死锁的一些通用操作
来源:互联网 发布:mysql官网地址 编辑:程序博客网 时间:2024/05/17 23:52
经常碰到Oracle数据库死锁,原因很多,大部分情况下都需要用到的操作主要有以下几个方面:
1、查找死锁。当发现死锁时,必须要知道死锁的情况和发生死锁的根源。
3、ORACLE里锁有以下几种模式:
0:none
1:null 空
2:Row-S 行共享(RS):共享表锁
3:Row-X 行专用(RX):用于行的修改
4:Share 共享锁(S):阻止其他DML操作
5:S/Row-X 共享行专用(SRX):阻止其他事务操作
6:exclusive 专用(X):独立访问使用
数字越大锁级别越高, 影响的操作越多。
4、一些基础判断
1、查找死锁。当发现死锁时,必须要知道死锁的情况和发生死锁的根源。
1)查看是否有死锁:
select object_id,session_id,locked_mode from v$locked_object;
2)查看死锁的用户和进程:
select t2.username,t2.sid,t2.serial#,t2.logon_timefrom v$locked_object t1,v$session t2where t1.session_id=t2.sidorder by t2.logon_time;
3)查看死锁的对象:
select t1.object_name,t2.session_id,t2.locked_modefrom dba_objects t1,v$locked_object t2where t1.object_id=t2.object_id;
或者
select t3.object_name,T3.object_type,t2.username,t2.sid,t2.serial#,t2.logon_timefrom dba_objects t3,v$locked_object t1,v$session t2where t1.session_id=t2.sidand t3.object_id=t1.object_id order by t2.logon_time;
4)查看死锁发生的sql语句:
select sql_text from v$sql where hash_value in (select sql_hash_value from v$session where sid in (select session_id from v$locked_object));
2、删除死锁:select object_id,session_id,locked_mode from v$locked_object;
2)查看死锁的用户和进程:
select t2.username,t2.sid,t2.serial#,t2.logon_timefrom v$locked_object t1,v$session t2where t1.session_id=t2.sidorder by t2.logon_time;
3)查看死锁的对象:
select t1.object_name,t2.session_id,t2.locked_modefrom dba_objects t1,v$locked_object t2where t1.object_id=t2.object_id;
或者
select t3.object_name,T3.object_type,t2.username,t2.sid,t2.serial#,t2.logon_timefrom dba_objects t3,v$locked_object t1,v$session t2where t1.session_id=t2.sidand t3.object_id=t1.object_id order by t2.logon_time;
4)查看死锁发生的sql语句:
select sql_text from v$sql where hash_value in (select sql_hash_value from v$session where sid in (select session_id from v$locked_object));
(1).先杀Oracle进程:
ALTER SYSTEM KILL SESSION '查出的SID,查出的SERIAL#';
(2).再杀操作系统进程:
KILL -9 刚才查出的SPID
ALTER SYSTEM KILL SESSION '查出的SID,查出的SERIAL#';
(2).再杀操作系统进程:
KILL -9 刚才查出的SPID
0:none
1:null 空
2:Row-S 行共享(RS):共享表锁
3:Row-X 行专用(RX):用于行的修改
4:Share 共享锁(S):阻止其他DML操作
5:S/Row-X 共享行专用(SRX):阻止其他事务操作
6:exclusive 专用(X):独立访问使用
数字越大锁级别越高, 影响的操作越多。
4、一些基础判断
- 一般的查询语句如select ... from ... ;是小于2的锁, 有时会在v$locked_object出现。select ... from ... for update; 是2的锁。
- 当对话使用for update子串打开一个游标时,所有返回集中的数据行都将处于行级(Row-X)独占式锁定,其他对象只能查询这些数据行,不能进行update、delete或select...for update操作。
- insert / update / delete ... ; 是3的锁。
- 没有commit之前插入同样的一条记录会没有反应, 因为后一个3的锁会一直等待上一个3的锁, 我们必须释放掉上一个才能继续工作。
- 创建索引的时候也会产生3,4级别的锁。
- locked_mode为2,3,4不影响DML(insert,delete,update,select)操作, 但DDL(alter,drop等)操作会提示ora-00054错误。
- 有主外键约束时 update / delete ... ; 可能会产生4,5的锁。
- DDL语句时是6的锁。
- Oracle数据库死锁的一些通用操作
- c# 操作oracle的一些通用函数
- Oracle数据库的一些操作
- Oracle数据库的一些操作
- oracle数据库的一些基础操作,包括数据导入导出,job,clob字段处理,死锁,解锁,dblink
- Oracle数据库一些操作
- oracle数据库的一些时间加减操作
- oracle 数据库的一些sql操作
- 关于oracle数据库的一些基本操作
- sql sever数据库与oracle数据库的一些常用操作
- 登陆ORACLE数据库和对数据库的一些简单操作
- Oracle数据库的死锁查看与处理
- Oracle数据库死锁处理
- Oracle数据库死锁解决方法
- oracle数据库死锁
- oracle数据库死锁解决方法
- oracle 查数据库死锁
- oracle数据库死锁问题
- 基于对话框的程序如何启动时不可见
- COM组件设计与应用(十五)连接点(vc6.0)
- 常来CSDN学习
- struts中的link标签
- COM组件设计与应用(十六)连接点(vc.net)
- Oracle数据库死锁的一些通用操作
- java读取.properties文件
- hash算法和常见的hash函数
- COM 组件设计与应用(十七)——持续性
- DB2 数据类型
- COM组件设计与应用(十八)——属性包
- 向导
- 把爱情给程序了
- 爱,就在你身后