Oracle 表死锁 解决

问题:更新的Update语句一直在更新 卡在执行update语句的地方。

清除的方法:

Oracle表死锁解除

我是在plsql中处理

1.先查询

select * from v$locked_object v, dba_objects o

where v.object_id = o.object_id

2.记录死锁表的session_id

3.Tools →Sessions

找到session_id对应Sessions窗口里的Sid(可以排下序再找比较快),在Status 列 右键

Kill.

即成,注意要有操作权限的用户才行

oracle 数据表死锁解决方法 Oracle
查询死锁信息的语句:

    select a.owner,
          a.object_name,
          b.xidusn,
          b.xidslot,
          b.xidsqn,
          b.session_id,
          b.oracle_username,
          b.os_user_name,
          b.process,
          b.locked_mode,
          c.machine,
          c.status,
          c.server,
          c.sid,
          c.serial#,
          c.program
     from all_objects a, v$locked_object b, sys.gv_$session c
    where (a.object_id = b.object_id)
      and (b.process = c.process)
    order by 1, 2  

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

第一步:查看是否有死锁存在,查出有数据则代表有死锁:

    select p.spid,c.object_name,b.session_id,b.oracle_username,b.os_user_name  from v$process p,v$session a,v$locked_object b,all_objects   c
    where  p.addr=a.paddr
    and    a.process=b.process
    and    c.object_id=b.object_id   

第二步:查出死锁session的精确信息【sid 为前面语句的session_id】

SELECT sid, serial#, username, osuser FROM v$session where sid=‘第一步查询出来的session_id‘;

第三步:删除死锁【第一个参数为sid,第二个为serial#】

alter system kill session ‘sid,serial#‘;

如果还不能解决,

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

其中sid用死锁的sid替换。

    1.exit
    2.ps -ef|grep spid   

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

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

-------------------------------------------------分割线

查询死锁:

select p.spid,c.object_name,b.session_id,b.oracle_username,b.os_user_name from
v$process p,v$session a, v$locked_object b,all_objects c
where p.addr=a.paddr and a.process=b.process and c.object_id=b.object_id 

SELECT sid, serial#, username, osuser FROM v$session where sid=‘1250‘;--根据上面的Session_id查询到 serial#
alter system kill session ‘1250,29967‘---1250就是上面的sid,29967就是上面的serial#
时间: 2024-10-19 04:05:50

Oracle 表死锁 解决的相关文章

Oracle常见死锁发生的原因以及解决方法

Oracle常见死锁发生的原因以及解决办法 一,删除和更新之间引起的死锁 造成死锁的原因就是多个线程或进程对同一个资源的争抢或相互依赖.这里列举一个对同一个资源的争抢造成死锁的实例. Oracle 10g, PL/SQL version 9.2 CREATE TABLE testLock(  ID NUMBER, test VARCHAR(100)  ) COMMIT INSERT INTO testLock VALUES(1,'test1'); INSERT INTO testLock VAL

oracle杀死锁表的进程(转发+合并+自己实践)

之一: Oracle数据库操作中,我们有时会用到锁表查询以及解锁和kill进程等操作 (1)锁表查询的代码有以下的形式:select count(*) from v$locked_object;select * from v$locked_object;(2)查看哪个表被锁select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id =

oracle 表空间不足解决办法

Oracle表空间不足,一般有两个原因: 1. 原表空间太小,没有自增长: 2. 表空间已自增长,而且表空间也已足够大 检查原因: 1. 查看表在那个表空间 select tablespace_name,table_name from user_talbes where table_name='test'; 2. 获取用户的默认表空间 select username, DEFAULT_TABLESPACE from dba_users where username='MXH'; 3. 查看表空间

查询Oracle锁表和解决方法

Oracle数据库操作中,我们有时会用到锁表查询以及解锁和kill进程等操作,那么这些操作是怎么实现的呢?本文我们主要就介绍一下这部分内容.(1)锁表查询的代码有以下的形式:select count(*) from v$locked_object;select * from v$locked_object;(2)查看哪个表被锁select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_obj

oracle 表被另一个用户锁住后的解决办法

oracle 表被另一个用户锁住后的解决办法 1.查看数据库锁,诊断锁的来源及类型: select object_id,session_id,locked_mode from v$locked_object; 2.找出数据库的serial#,以备杀死: select t2.username,t2.sid,t2.serial#,t2.logon_time from v$locked_object t1,v$session t2 where t1.session_id=t2.sid order by

oracle表空间扩容、创建、删除(解决表空间不足问题)

前言 整理一下之前使用oracle数据库遇到的表空间不足的问题,顺便水个博客. oracle表空间操作语句 1.改变已存在的数据文件的大小 ALTER TABLESPACE app_data ADD DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP03.DBF' SIZE 20480M; 2.允许已存在的数据文件自动增长 ALTER DATABASE DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\

ORACLE中死锁

ORACLE中死锁的知识点总结   死锁的概念 什么是死锁呢? 其实我们生活中也有很多类似死锁的例子. 我先举一个生活中的例子:过年回家,父亲买了一把水弹枪,儿子和侄子争抢着要先玩,谁也不让谁,拆开包装后,一个抢了枪, 一个逮住了子弹和弹夹.两个都争着要先玩,但是都互不相让.结果两个人都玩不了.如果儿子要先玩,就必须让侄子把子弹和弹夹给他,如果侄子要先玩,就必须让儿子把枪给侄子.他们就这样对峙了十几分钟,互不相让. 我出来调停,让儿子把枪先给侄子玩,每个人玩十分钟.然后两个人开开心心一起玩起来.

ORACLE中死锁的知识点总结

  死锁的概念 什么是死锁呢? 其实我们生活中也有很多类似死锁的例子. 我先举一个生活中的例子:过年回家,父亲买了一把水弹枪,儿子和侄子争抢着要先玩,谁也不让谁,拆开包装后,一个抢了枪, 一个逮住了子弹和弹夹.两个都争着要先玩,但是都互不相让.结果两个人都玩不了.如果儿子要先玩,就必须让侄子把子弹和弹夹给他,如果侄子要先玩,就必须让儿子把枪给侄子.他们就这样对峙了十几分钟,互不相让. 我出来调停,让儿子把枪先给侄子玩,每个人玩十分钟.然后两个人开开心心一起玩起来.其实这就是一个活生生的死锁(De

SqlServer定时备份数据库和定时杀死数据库死锁解决

PS:Sqlserver 2008 R2,windows 8 64位 1.备份数据库 因为要备份,我们就要用到Sqlserver的代理,默认数据库的代理是不开启的.需要我们手动开启的. 执行备份数据库脚本,现在将脚本公布,其实将这一段代码中需要保存的文件路径和数据库名称替换一下就可以实现备份了.但是还没有达到定时备份的目的 ? 1 2 3 4 5 6 7 8 9 10 11 --自动备份并保存最近5天的SQL数据库作业脚本 宋彪 20130310 DECLARE @filename VARCHA