精华内容
下载资源
问答
  • 查询死锁的表SQL

    2020-08-13 17:48:31
    查询死锁的表SQL /*================================================== ORACLE里锁有以下几种模式: 0:none 1:null 空 2:Row-S 行共享(RS):共享表锁,sub share 3:Row-X 行独占(RX):用于行的修改,sub ...

    查询死锁的表SQL

    /*==================================================
    ORACLE里锁有以下几种模式:
    0:none
    1:null 空
    2:Row-S 行共享(RS):共享表锁,sub share 
    3:Row-X 行独占(RX):用于行的修改,sub exclusive 
    4:Share 共享锁(S):阻止其他DML操作,share
    5:S/Row-X 共享行独占(SRX):阻止其他事务操作,share/sub exclusive 
    6:exclusive 独占(X):独立访问使用,exclusive
    
    Locked_Mode数字越大锁级别越高, 影响的操作越多。
    1级锁有:Select,有时会在v$locked_object出现。
    2级锁有:Select for update,Lock For Update,Lock Row Share 
    select for update当对话使用for update子串打开一个游标时,所有返回集中的数据行都将处于行级(Row-X)独占式锁定,其他对象只能查询这些数据行,不能进行update、delete或select for update操作。
    3级锁有:Insert, Update, Delete, Lock Row Exclusive
    没有commit之前插入同样的一条记录会没有反应, 因为后一个3的锁会一直等待上一个3的锁, 我们必须释放掉上一个才能继续工作。
    4级锁有:Create Index, Lock Share
    locked_mode为2,3,4不影响DML(insert,delete,update,select)操作, 但DDL(alter,drop等)操作会提示ora-00054错误。
    00054, 00000, "resource busy and acquire with NOWAIT specified"
    // *Cause: Resource interested is busy.
    // *Action: Retry if necessary.
    5级锁有:Lock Share Row Exclusive 
    具体来讲有主外键约束时update / delete ... ; 可能会产生4,5的锁。
    6级锁有:Alter table, Drop table, Drop Index, Truncate table, Lock Exclusive
    ===================================================*/
    --查询死锁的表,并解锁
    SELECT Dob.Object_Name Table_Name,
           Lo.Locked_Mode,
           Lo.Session_Id,
           Vss.Serial#,
           Vps.Spid,
           Vss.Client_Identifier,
           Vss.Status,
           Vss.Action Action,
           Vss.Osuser Osuser,
           Vss.Process Ap_Pid,
           Vps.Spid Db_Pid,
           'alter system kill session ' || '''' || Lo.Session_Id || ',' || Vss.Serial# ||
           ''';' Kill_Command
      From V$locked_Object Lo,
           Dba_Objects     Dob,
           V$session       Vss,
           V$process       Vps
     Where Lo.Object_Id = Dob.Object_Id
       And Lo.Session_Id = Vss.Sid
       And Vss.Paddr = Vps.Addr
    -- AND vss.STATUS = 'ACTIVE'
    --AND  dob.OBJECT_NAME like 'AP_%' 
    -- AND  vss.client_info like '81%'--OU_ID:就是指所在企业的OU的ID
     Order By 2,
              3,
              Dob.Object_Name;
    --杀掉进程 sid,serial#
    --ALTER system KILL session '813,1825';
    
    
    展开全文
  • 三、查询死锁的信息 四、死锁的解决方法 1.用户知道死锁的语句的解决办法 2.用户不知道在哪死锁的解决办法 正文 一、死锁产生的原因 其实所有的死锁最深层的原因就是一个:资源竞争。造成这种原因基本上都是...

    目录

    一、死锁产生的原因

    二、死锁产生的案例

    三、查询死锁的信息

    四、死锁的解决方法

    1.用户知道死锁的语句的解决办法 

    2.用户不知道在哪死锁的解决办法


    正文

    一、死锁产生的原因

           其实所有的死锁最深层的原因就是一个:资源竞争。造成这种原因基本上都是不正确的程序设计造成的,经过调整后,基本上都会避免死锁的发生。

    二、死锁产生的案例

      1:用户1对A表进行Update,没有提交。

           2:用户2对B表进行Update,没有提交。 此时双反不存在资源共享的问题。

           3:如果用户2此时对A表作update,则会发生阻塞,需要等到用户1的事物结束。 

           4:如果此时用户1又对B表作update,则产生死锁(报了 ora-00060 deadlock的错误)。此时Oracle会选择其中一个用户进              行会滚,使另一个用户继续执行操作。

    三、查询死锁的信息

    通过检查数据库表,能够检查出是哪一条语句被死锁,产生死锁的机器是哪一台。
    1)用dba用户执行以下语句:

    select username,lockwait,status,machine,program from v$session where sid in
    (select session_id from v$locked_object)


    如果有输出的结果,则说明有死锁,具体字段说明如下:


    2)用dba用户执行以下语句,可以查看到被死锁的语句。
     

    select sql_text from v$sql where hash_value in 
    (select sql_hash_value from v$session where sid in
    (select session_id from v$locked_object))

    四、死锁的解决方法


    1.用户知道死锁的语句的解决办法 

        如果用户 知道死锁的额语句,就可以直接将产生死锁的语句提交即可。

    2.用户不知道在哪死锁的解决办法

    1)首先先在PL/SQL中,执行以下语句,查询死锁的信息:

    select * from v$session t1, v$locked_object t2 where t1.sid = t2.SESSION_ID; 

    2)然后可以在PL/SQL中新建命令窗口执行如下的命令(也可在Xshell中执行该命令)

    alter system kill session '41,43812'; 
    alter system kill session '325,47026'; 

     

    展开全文
  • 查是哪个进程死锁了哪些 select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName from sys.dm_tran_locks where ...下面的代码是可以看到死锁的语句 use mastergodeclare @...

    查是哪个进程死锁了哪些表

    select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName
    from sys.dm_tran_locks where resource_type='OBJECT'

     

     

    下面的代码是可以看到死锁的语句

    use master
    go
    declare @spid int,@bl int
    DECLARE s_cur CURSOR FOR
    select 0 ,blocked
    from (select * from sysprocesses where blocked>0 ) a
    where not exists(select * from (select * from sysprocesses where blocked>0 ) b
    where a.blocked=spid)
    union select spid,blocked from sysprocesses where blocked>0
    OPEN s_cur
    FETCH NEXT FROM s_cur INTO @spid,@bl
    WHILE @@FETCH_STATUS = 0
    begin
    if @spid =0
    select '引起数据库死锁的是:
    '+ CAST(@bl AS VARCHAR(10)) + '进程号,其执行的SQL语法如下'
    else
    select '进程号SPID:'+ CAST(@spid AS VARCHAR(10))+ '被' + '
    进程号SPID:'+ CAST(@bl AS VARCHAR(10)) +'阻塞,其当前进程执行的SQL语法如下'
    DBCC INPUTBUFFER (@bl )
    FETCH NEXT FROM s_cur INTO @spid,@bl
    end
    CLOSE s_cur
    DEALLOCATE s_cur

     

    转载于:https://www.cnblogs.com/JangoJing/p/7573809.html

    展开全文
  • mysql 查询表死锁 和结束死锁的表步骤   转载▼ 标签:  mysql   死锁   查询表   进程   步骤   1、查询是否锁表 show OPEN TABLES where In_use > 0...
    

    mysql 查询表死锁 和结束死锁的表步骤

     
    标签: 

    mysql

     

    死锁

     

    查询表

     

    进程

     

    步骤

     

    1、查询是否锁表
    show OPEN TABLES where In_use > 0;

     

    2、查询进程

        show processlist
      查询到相对应的进程===然后 kill    id

     

    补充:

    查看正在锁的事务

    SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; 

     

    查看等待锁的事务

    SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS; 

    展开全文
  • 1、查询是否锁 show OPEN TABLES where In_use > 0;   2、查询进程  show processlist  查询到相对应进程===然后 kill id   补充: 查看正在锁事务 SELECT * FROM INFORMATION_SCHEMA....
  • oracle 查询死锁

    千次阅读 2018-12-04 10:25:08
    --查询死锁 查出来东西 ,直接 copy 出来执行,就能杀死了。还不谢谢我。 SELECT lo.SESSION_ID ,s.SERIAL#,ao.object_name,'ALTER system KILL session '''||lo.SESSION_ID||','||s.SERIAL#||''';'  FROM v$...
  • 1、查询是否锁show OPENTABLES where In_use > 0; 2、查询进程 show processlist查询到相对应进程===然后 killid 补充: 查看正在锁事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; 查看...
  • 一、PostgreSQL中查询死锁的表 WITH t_wait AS ( SELECT a.mode,a.locktype,a.databASe,a.relation,a.page,a.tuple,a.clASsid,a.granted, a.objid,a.objsubid,a.pid,a.virtualtransaction,a.virtualxid,a....
  • mysql查询表死锁和结束死锁的方法   1、查询是否锁 show open tables where in_use>0; 2、查询进程 show processlist 查询到相对应的进程,然后 kill id 3、查看正在锁的事务 select * from ...
  • SQLServer查看死锁的表和Kill死锁进程

    千次阅读 2020-03-02 11:56:04
    SQLServer查看死锁的表和Kill死锁进程1、查询出现死锁的表2、杀死某个锁3、也可以创建查看死锁进程的存储过程4、也可以穿件杀掉引起死锁进程的存储过程 1、查询出现死锁的表 查询语句 select request_session_id ...
  • 查询发生死锁的表 SELECT request_session_id spid , OBJECT_NAME(resource_associated_entity_id) tableNameFROM sys.dm_tran_locksWHERE resource_type = 'OBJECT' 数据库当前链接 select top 1000 * from sys....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,174
精华内容 469
关键字:

查询死锁的表