ITPub博客

首页 > 数据库 > Oracle > Oracle TX锁的处理

Oracle TX锁的处理

原创 Oracle 作者:ZQqzz 时间:2021-01-26 15:25:32 0 删除 编辑

什么是 T X 锁呢?我们这里简单的说明下:

在 Oracle 数据库中,当一个事务首次发起一个 DML 语句时就获得一个 TX 锁,该锁保持到事务被提交或回滚。当两个或多个会话在表的同一条记录上执行 DML 语句时,第一个会话在该条记录上加锁,其他的会话处于等待状态。当第一个会话提交后, TX 锁被释放,其他会话才可以加锁。

当 Oracle 数据库发生 TX 锁等待时,若处理不及时常会引起 Oracle 数据库挂起或死锁,产生 ORA-00060 的错误,导致应用出现长时间未响应、大量事务失败等问题。


下面我们可以简单的模拟一个 T X 锁:

会话 A : 我要对表 zqz .t1 做更新,而且我还故意不提交

SQL> update zqz.t1 set id=2 where id=1;

 

5 rows updated.

会话 B :我对会话 A 的恶行一无所知,我也要去更新表 zq z.t1 的同样的行:

SQL>  update zqz.t1 set id=10086 where id=1;

 

 

 

漫长的等待过后,会话 B 发现,我怎么还没运行完这条 sql ,按道理应该很快的啊???

如何查询到 T X 锁的相关信息

这个时候,我们用以下语句去查询,就会发现数据库出现了个 T X 锁:

select  b.inst_id,

       b.sid,

       b.serial#,

       b.username,

       b.blocking_session,

       b.program,

       b.machine,

       a.sql_id,

       a.sql_text

   from  gv$sql a, gv$session b

  where  a.sql_id = b.sql_id

    and  b.event = 'enq: TX - row lock contention'

    and  a.inst_id = b.inst_id;

 

查询到会话 B 被阻塞了。

我们再使用以下 sql ,可以查询到被锁对象的具体信息:

select  a.inst_id,

       b.owner,

       b.object_name,

       b.object_type,

       a.row_wait_obj#,

       a.row_wait_file#,

       a.row_wait_block#,

       a.row_wait_row#

   from  gv$session a, dba_objects b

  where  a.event = 'enq: TX - row lock contention'

    and  a.row_wait_obj# = b.object_id;

 

 

再再使用以下 sql ,我们可以查询到罪魁祸首的会话信息:

select  a.INST_ID, b.sid, b.serial#, a.spid, a.username, a.program, b.event

   from  gv$process a, gv$session b

  where  a.inst_id = b.inst_id

    and  a.addr = b.paddr

    and  b.sid in  ( select  blocking_session

                    from  gv$session

                   where  event = 'enq: TX - row lock contention' )

 

 

原来内鬼就是会话 id 为 73 的会话。

如何处理 T X 锁 :

接下来你可以选择以下的方法去处理这个会话(在确保不会影响业务的情况下):
1. 用以下 S QL 来 kill 该会话:

alter system kill session'{sid},{serial_id}' immediate;

2. 直接找到这个会话的操作系统进程,直接 kill  -9 杀掉

进程号就是它:

 


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69993859/viewspace-2753137/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
数据库DBA

注册时间:2021-01-25

  • 博文量
    13
  • 访问量
    19145