本文主要是介绍如何解決ORACLE表死锁问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
当ORACLE出现表锁死的情况,会导致其他人员无法编辑相关资料,严重的造成应用程式崩溃。
如何处理表死锁的问题?
1、查询锁死的表;
SELECT /*+ rule*/ a.sid, b.owner, object_name, object_type FROM v$lock a, all_objects b WHERE TYPE = 'TM' and a.id1 = b.object_id ;
2、根据SID查询SID和SERIAL#;
SELECT sid,serial# FROM v$session WHERE sid = &sid;
3、根据SID和SERIAL#,杀掉被锁死的表,使之可被编辑。
alter system kill session 'SID,SERIAL#';
若是有多个节点,以上SQL语句中,将“v$lock”修改为“gv$lock”,
“v$session ”修改為“gv$session ”,否则会遗漏信息。
方法二:
以下的文章主要描述的是Oracle死锁的解决办法,你如果对Oracle死锁的具体解决办法有兴趣的话你就可以点击以下的文章进行观看了。以下就是具体方案的描述,希望在你今后的学习中会有所帮助。
1.查哪个过程被锁
查V$DB_OBJECT_CACHE视图:
SELECT * FROM V$DB_OBJECT_CACHE WHERE OWNER='过程的所属用户' AND LOCKS!='0';
2. 查是哪一个SID,通过SID可知道是哪个SESSION.
查V$ACCESS视图:
SELECT * FROM V$ACCESS WHERE OWNER='过程的所属用户' AND NAME='刚才查到的过程名';
3. 查出SID和SERIAL#
查V$SESSION视图:
SELECT SID,SERIAL#,PADDR FROM V$SESSION WHERE SID='刚才查到的SID'
查V$PROCESS视图:
SELECT SPID FROM V$PROCESS WHERE ADDR='刚才查到的PADDR';
4. 杀进程
(1).先杀Oracle进程:
ALTER SYSTEM KILL SESSION '查出的SID,查出的SERIAL#';
(2).能过CMD控制台,再杀操作系统进程:
ORAKILL 数据库实现 刚才查出的SPID
一定要记住,要把之前查出的Oracle死锁记下来,然后,一一对其Kill,如果Kill不干净的话,还是解决不了问题
上述的相关内容就是对Oracle死锁解决办法的描述,希望会给你带来一些帮助在此方面。
这篇关于如何解決ORACLE表死锁问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!