ORACLE数据库死锁处理

本文探讨了数据库死锁的形成原因,包括关联表锁定规则,并提供了查询死锁的方法,如通过v$session和v$locked_object视图,以及解决死锁的步骤,如杀死会话和检查死锁语句。还涉及了索引问题排查。
摘要由CSDN通过智能技术生成


一、注意点

不一定产生的所有锁都是死锁,如:A、B两个表有主外键关联,那么在对从表的数据进行操作时,是不允许删除主表的数据的,所以锁住了主表的数据(有关联的)。

二、死锁的查询及处理


-- 在数据库无系统运行时(直接查锁)
select * from v$session t1, v$locked_object t2 where t1.sid = t2.SESSION_ID

-- 杀掉对应的会话进程(SID,SERIAL#)
alter system kill session '19,5884';

-- 存在系统运行(有其他锁)object_name:表名
SELECT
	s.SID,
	s.serial#,
	lo.oracle_username,
	lo.os_user_name,
	do.object_name,
	lo.locked_mode
FROM
	v$locked_object lo,
	dba_objects do,
	v$session s
WHERE
	do.object_id = lo.object_id
AND lo.session_id = s.SID;

-- 查看是什么语句造成的死锁
select l.session_id sid,
       s.serial#,
       l.locked_mode,
       l.oracle_username,
       s.user#,
       l.os_user_name,
       s.machine,
       s.terminal,
       a.sql_text,
       a.action
  from v$sqlarea a, v$session s, v$locked_object l
where l.session_id = s.sid
   and s.prev_sql_addr = a.address
order by sid, s.serial#;

-- 如果造成锁表的语句和某张表密切相关,则可能是该表的索引产生异常
-- 查表的索引
SELECT * FROM user_indexes where table_name='表名'

-- 查表的索引的基本情况
select user_ind_columns.index_name,user_ind_columns.column_name,

user_ind_columns.column_position,user_indexes.uniqueness

from user_ind_columns,user_indexes

where user_ind_columns.index_name = user_indexes.index_name

and user_ind_columns.table_name = '表名';

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

铦鹞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值