Oracle 查询死锁并解锁的终极处理方法_oracle

一些ORACLE中的进程被杀掉后,状态被置为"killed",但是锁定的资源很长时间不释放,有时实在没办法,只好重启数据库。现在提供一种方法解决这种问题,那就是在ORACLE中杀不掉的,在OS一级再杀。

1.下面的语句用来查询哪些对象被锁:

复制代码 代码如下:

select object_name,machine,s.sid,s.serial#
from v$locked_object l,dba_objects o ,v$session s
where l.object_id = o.object_id and l.session_id=s.sid;

2.下面的语句用来杀死一个进程:

复制代码 代码如下:

alter system kill session '24,111';

(其中24,111分别是上面查询出的sid,serial#)
【注】以上两步,可以通过Oracle的管理控制台来执行。

3.如果利用上面的命令杀死一个进程后,进程状态被置为"killed",但是锁定的资源很长时间没有被释放,那么可以在os一级再杀死相应的进程(线程),首先执行下面的语句获得进程(线程)号:

复制代码 代码如下:

select spid, osuser, s.program
from v$session s,v$process p
where s.paddr=p.addr and s.sid=24

(24是上面的sid)

4.在OS上杀死这个进程(线程):

1)在unix上,用root身份执行命令:
#kill -9 12345(即第3步查询出的spid)

2)在windows(unix也适用)用orakill杀死线程,orakill是oracle提供的一个可执行命令,语法为:
orakill sid thread

其中:
sid:表示要杀死的进程属于的实例名
thread:是要杀掉的线程号,即第3步查询出的spid。
例:c:>orakill orcl 12345

总结:oracle会话被锁是经常的。但有时alter system kill session 'sid,serial#';并不能彻底的杀死会话。只能通过杀死OS上对应的进程才行。

时间: 2024-09-06 08:21:42

Oracle 查询死锁并解锁的终极处理方法_oracle的相关文章

oracle 会话 死锁 执行sql 执行job的方法_oracle

//根据用户分组会话 select t.USERNAME,count(*) from v$session t group by t.USERNAME //查找某一用户正在执行的sql_id值 select * from v$session t where t.USERNAME = 'BUDGET' and t.SQL_ID is not null //查找对应sql_id的对应sql语句 select m.SQL_TEXT from v$session t , v$sqlarea m where

Oracle出现超出打开游标最大数的解决方法_oracle

本文实例讲述了Oracle出现超出打开游标最大数的解决方法.分享给大家供大家参考,具体如下: Java代码在执行conn.createStatement()和conn.prepareStatement()的时候,实际上都是相当与在数据库中打开了一个cursor.尤其是,假如你的createStatement和prepareStatement是在一个循环里面的话,就会非常轻易出现这个问题.因为游标一直在不停的打开,而且没有关闭. 一般来说,我们在写Java代码的时候,createStatement

在oracle 数据库查询的select 查询字段中关联其他表的方法_oracle

大部分情况下,这种动态生成的sql查询语句写法如下: 复制代码 代码如下: select A表.字段1,A表.字段2,B表.字段返回,C表.字段返回 from A表 ,B表,C表 [where A表,B表,C表关联及各自的条件语句] 但是这个方法有一个缺点,那就是在动态的生成这个查询语句的业务逻辑程序仍然很复杂.这里就介绍一个降低业务逻辑复杂度的查询sql生成方式.其语法结构如下: 复制代码 代码如下: select A表.字段1,A表.字段2,B表.字段,C表.字段 from A表 [wher

Oracle中rank,over partition函数的使用方法_oracle

排列(rank())函数.这些排列函数提供了定义一个集合(使用 PARTITION 子句),然后根据某种排序方式对这个集合内的元素进行排列的能力,下面以scott用户的emp表为例来说明rank over partition如何使用. 1)查询员工薪水并连续求和 select deptno,ename,sal, sum(sal)over(order by ename) sum1, sum(sal)over() sum2, 100* round(sal/sum(sal)over(),4) "bal

Oracle提高SQL执行效率的3种方法_oracle

Oracle提供了多种方法用于减少花在剖析Oracle SQL表达式上的时间,在执行带有大量执行计划的复杂查询时剖析过程会拖累系统的性能.现在我们来简要地看看这些方法中的几种. 1.使用ordered提示 Oracle必须花费大量的时间来剖析多表格的合并,用以确定表格合并的最佳顺序.如果SQL表达式涉及七个乃至更多的表格合并,那么有时就会需要超过30分钟的时间来剖析,因为Oracle必须评估表格合并所有可能的顺序.八个表格就会有40,000多种顺序.Ordered这个提示(hint)和其他的提示

oracle增加表空间大小两种实现方法_oracle

两种方法,一种是为表空间增加数据文件: 复制代码 代码如下: alter tablespace users add datafile '/opt/oracle/oradata/esop/so_data02.dbf' size 200M; 另一种方法是增加表空间原有数据文件尺寸: 复制代码 代码如下: alter database datafile '/opt/oracle/oradata/esop/so_data01.dbf' resize 200M;

win x64下安装oracle 12c出现INS-30131报错的解决方法_oracle

本文为大家分享了安装oracle 12c出现[INS-30131]报错的解决方案,供大家参考,具体内容如下 解决方案: 第一步:控制面板>所有控制面板项>管理工具>服务>SERVER启动 第二步:控制面板>所有控制面板项>管理工具>计算机管理>系统工具>共享文件夹>共享右键单击"共享">新建共享> 点击"下一步">单击"浏览">选择"本地磁盘(C:)&q

查看oracle数据库的编码及修改编码格式的方法_oracle

首先查看oracle数据库的编码 SQL> select * from nls_database_parameters where parameter ='NLS_CHARACTERSET'; PARAMETER -------------------- VALUE -------------------- NLS_CHARACTERSET AL32UTF8 这其来源于props$,这是表示数据库的字符集. oracle客户端编码 SQL> select * from nls_instance

Oracle 分析函数RANK(),ROW_NUMBER(),LAG()等的使用方法_oracle

ROW_NUMBER() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序 而这个值就表示每组内部排序后的顺序编号(组内连续的唯一的) RANK() 类似,不过RANK 排序的时候跟派名次一样,可以并列2个第一名之后 是第3名 LAG 表示 分组排序后 ,组内后面一条记录减前面一条记录的差,第一条可返回 NULL BTW: EXPERT ONE ON ONE 上讲的最详细,还有很多相关特性,文档看起来比较费劲 row