当前位置: 首页 > news >正文

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;

 


-------------

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进程。 

 

 

 

 

 

 

 

 

经过以下处理,对于释放服务器资源,效果非常明显

 

--查询死锁的进程
select   'ALTER  SYSTEM  KILL  SESSION  '''||b.sid||',  '||b.serial#||''';'
from v$access a,v$session b
where a.SID=b.SID
and b.program like 'dis%'
group by b.sid,b.serial#

 

--查询SID对应的操作系统进程

select spid, osuser, s.program from v$session s,v$process p where
s.paddr=p.addr and s.sid in (54,82,500,195,303,492,496)

--查看操作系统进程

 ps -ef | more

 

--从操作系统杀掉会话不能杀的进程

kill -9 操作系统进程号

转载于:https://www.cnblogs.com/leischen/archive/2012/03/19/2406612.html

相关文章:

  • 【Unity3D】夏日大作战Jumper~
  • Play Famework Use JBoss Netty
  • Linux系统资源监控命令
  • 如何在Visual Studio 2010中新建CUDA 4.0项目
  • 深入理解JavaScript系列(11):执行上下文(Execution Contexts)
  • 采用curl库
  • centos 5.7_64位下FastDFS_client的配置和PHP测试
  • C#尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
  • 设置开机等待时间
  • Sharepoint 2013 左右quot;SPChangequot;一个简短的引论
  • 哄骗JQuery直接调用asp.net后台办法
  • DOM Document节点类型详解
  • C 工具库5:first fit pool
  • 使用eclipse 开发android应用没有代码提示
  • 写得蛮好的linux学习笔记
  • [笔记] php常见简单功能及函数
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • classpath对获取配置文件的影响
  • co.js - 让异步代码同步化
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • gulp 教程
  • oldjun 检测网站的经验
  • oschina
  • php中curl和soap方式请求服务超时问题
  • vue学习系列(二)vue-cli
  • windows下mongoDB的环境配置
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 浮动相关
  • 给Prometheus造假数据的方法
  • 关于for循环的简单归纳
  • 诡异!React stopPropagation失灵
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 解析带emoji和链接的聊天系统消息
  • 每天10道Java面试题,跟我走,offer有!
  • 突破自己的技术思维
  • 学习JavaScript数据结构与算法 — 树
  • 一起参Ember.js讨论、问答社区。
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (09)Hive——CTE 公共表达式
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (23)Linux的软硬连接
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (排序详解之 堆排序)
  • (万字长文)Spring的核心知识尽揽其中
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .Net core 6.0 升8.0
  • .Net 垃圾回收机制原理(二)
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)