`

(转)从问题入手帮你解决Oracle杀死死锁进程

阅读更多

http://dev.firnow.com/course/7_databases/oracle/oraclejs/20081012/150416.html

从问题入手帮你解决Oracle杀死死锁进程

www.firnow.com    时间 : 2008-10-12  作者:佚名   编辑:本站 点击:  458 [ 评论 ]



 
 
Oracle杀死死锁进程

  先查看哪些表被锁住了:

select b.owner,b.object_name,a.session_id,a.locked_mode
from v$locked_object a,dba_objects b
where b.object_id = a.object_id;
OWNER OBJECT_NAME SESSION_ID LOCKED_MODE
------------------------------ -----------------
WSSB SBDA_PSHPFTDT  22 3
WSSB_RTREPOS WB_RT_SERVICE_QUEUE_TAB  24 2
WSSB_RTREPOS WB_RT_NOTIFY_QUEUE_TAB  29 2
WSSB_RTREPOS WB_RT_NOTIFY_QUEUE_TAB  39 2
WSSB SBDA_PSDBDT 47 3
WSSB_RTREPOS WB_RT_AUDIT_DETAIL 47 3
select b.username,b.sid,b.serial#,logon_time
from v$locked_object a,v$session b
where a.session_id = b.sid order by b.logon_time;
USERNAME  SID  SERIAL# LOGON_TIME
------------------------------ ---------- -------
WSSB_RTACCESS 39 1178 2006-5-22 1
WSSB_RTACCESS 29 5497 2006-5-22 1

  杀进程中的会话:

alter system kill session 'sid,serial#';
e.g
alter system kill session '29,5497';

  如果有ora-00031错误,则在后面加immediate;alter system kill session '29,5497' immediate;

  如何杀死oracle死锁进程

  1.查哪个过程被锁:

  查V$DB_OBJECT_CACHE视图:

  SELECT * FROM V$DB_OBJECT_CACHE WHERE OWNER='过程的所属用户' AND CLOCKS!='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)再杀操作系统进程:

  KILL -9 刚才查出的SPID或ORAKILL 刚才查出的SID 刚才查出的SPID。

  Oracle的死锁

  查询数据库死锁:

select t2.username||'  '||t2.sid||' 
'||t2.serial#||'  '||t2.logon_time||' 
'||t3.sql_text
from v$locked_object t1,v$session t2,v$sqltext t3
where t1.session_id=t2.sid
and t2.sql_address=t3.address
order by t2.logon_time;

  查询出来的结果就是有死锁的session了,下面就是杀掉,拿到上面查询出来的SID和SERIAL#,填入到下面的语句中:

  alter system kill session 'sid,serial#';

  一般情况可以解决数据库存在的死锁了,或通过session id 查到对应的操作系统进程,在Unix中杀掉操作系统的进程。

SELECT a.username,c.spid AS os_process_id,c.pid
AS oracle_process_id FROM v$session a,v$process c
WHERE c.addr=a.paddr and a.sid= and a.serial#= ;

  然后采用kill (unix) 或 orakill(windows )。

  在Unix中:

ps -ef|grep os_process_id
kill -9 os_process_id
ps -ef|grep os_process_id

  经常在Oracle的使用过程中碰到这个问题,所以也总结了一点解决方法。

  1)查找死锁的进程:

sqlplus "/as sysdba"  (sys/change_on_install)
SELECT s.username,l.OBJECT_ID,l.SESSION_ID,s.SERIAL#,
l.ORACLE_USERNAME,l.OS_USER_NAME,l.PROCESS
FROM V$LOCKED_OBJECT l,V$SESSION S WHERE l.SESSION_ID=S.SID;

  2)kill掉这个死锁的进程:

  alter system kill session ‘sid,serial#’; (其中sid=l.session_id)

  3)如果还不能解决:

select pro.spid from v$session ses,
v$process pro where ses.sid=XX and
ses.paddr=pro.addr;

  其中sid用死锁的sid替换:

exit
ps -ef|grep spid

  其中spid是这个进程的进程号,kill掉这个Oracle进程。

分享到:
评论

相关推荐

    如何解决Oracle杀死死锁进程

    Oracle 杀死死锁进程是数据库管理员经常遇到的问题,本文将介绍解决 Oracle 杀死死锁进程的方法。 在 Oracle 中,死锁是指两个或多个会话在等待对方释放资源,从而导致互相阻塞的情况。死锁可能会导致数据库性能...

    postgresql查询死锁以及杀死死锁进程sql.txt

    查询sql的死锁进程,查找并杀死。解决生产数据库中卡死的现象。postgresql查询死锁以及杀死死锁进程sql

    SQLServler自动杀死死锁进程

    "SQLServer自动杀死死锁进程"这一话题旨在探讨如何配置SQL Server来自动检测并解决这些死锁情况,以避免系统阻塞和性能下降。 1. **死锁的基本概念**: 死锁是指两个或多个事务在执行过程中,因争夺资源而造成的一...

    杀死oracle死锁进程

    解决Oracle数据库死锁问题,查询出数据库所有死锁,并杀死所有的死锁,解决程序运行问题;

    SQL SERVER 2008 R2 查看和杀死死锁进程

    SQL SERVER 2008 R2 查看和杀死死锁进程。数据库进程死锁是一个很严重的问题,快速定位到死锁的进程尤为重要。

    sqlserver2000中如何自动杀死死锁进程.pdf

    根据提供的文件信息,文件名为“sqlserver2000中如何自动杀死死锁进程.pdf”,并且该文档描述了如何在SQL Server 2000环境下自动检测并解决死锁问题的详细过程。以下将详细阐述该文件中的知识点。 1. 死锁的定义与...

    自动杀掉SQLSERVER中的死锁进程

    本过程自动捕捉SQLSERVER中的死锁进程并且自动杀掉

    oracle数据库解决死锁

    Oracle数据库解决死锁是指在Oracle数据库中出现的死锁问题,通过使用PL/SQL语句手动解决死锁问题。死锁是当多个事务在等待其他事务释放资源时,导致系统无法继续执行的现象。 在Oracle数据库中,死锁可能是由多种...

    有效关闭Oracle死锁进程,和释放状态为killed的session

    在Oracle数据库管理中,处理死锁进程和释放状态为killed的session是一项关键技能,尤其对于维护数据库性能和稳定性至关重要。以下将详细阐述如何通过一系列步骤有效地关闭Oracle死锁进程,以及如何释放状态为killed...

    oracle查询死锁语句

    oracle查询死锁语句,并能根据根据ID值杀死锁表的进程!

    oracle 死锁时候 ,杀进程方法

    - **步骤2:** 获取到SPID后,可以根据不同的操作系统环境,使用特定的命令来杀死进程。 - **在Unix环境中**,如果你有root权限,可以使用`kill`命令: ```bash # kill -9 ``` - **在Windows环境中**,可以...

    Sqlserver分析死锁进程

    SQL Server提供了多种工具和方法来检测和分析死锁,以便管理员能够及时发现并解决问题。本文将详细介绍如何在SQL Server中分析死锁进程,特别是如何通过存储过程来捕捉和分析死锁信息。 ### 死锁分析存储过程 在...

    oracle死锁原因解决办法

    ### Oracle死锁原因及解决办法 #### 一、Oracle死锁概述 在Oracle数据库系统中,死锁是一种常见的并发问题,它会导致多个事务之间互相等待对方释放资源而无法继续执行,最终导致整个系统的运行效率降低甚至停滞。...

    orcal解锁杀死死锁进程

    orcal解锁杀死死锁进程导出表中的数据到Excel,包含字段名,文件为真正的Excel文件 ,如果文件不存在,将自动创建文件 ,如果表不存在,将自动创建表 基于通用性考虑,仅支持导出标准数据类型

    oracle-死锁查询

    oracle死锁问题查询代码,仅供参考,有问题大家一起交流

    oracle杀死锁,寻PIDKILL进程

    oracle杀死锁 ,在批量导入数据的时候,在数据库中很容易就碰到锁表了,导致长时间数据库卡死,此脚本方便找寻数据库被锁对象,如果在oracle中不能alter kill掉 说明该session已过期需要进入后台去杀掉进程

    查看oracle进程,杀进程pb源程序

    本文将深入探讨如何使用PB(PowerBuilder)源程序来查看Oracle进程并进行必要的操作,如杀死进程。 首先,我们要了解Oracle进程的概念。在Oracle数据库中,进程主要分为用户进程和服务器进程。用户进程是由数据库...

    oracle解锁,死锁

    ### Oracle解锁与死锁解析 #### 一、Oracle解锁与死锁概述 在Oracle数据库管理过程中,解锁与处理死锁是...通过上述方法和技术,可以有效地管理和解决Oracle数据库中的解锁与死锁问题,从而提高系统的稳定性和效率。

Global site tag (gtag.js) - Google Analytics