ORACLE LOCK

V$LOCK
ADDR 锁定状态对象地址
KADDR 锁地址
SID 会话id
ID1 锁标识符#1
ID2 锁标识符#2
LMODE 会话持有的锁模式(0~6)
REQUEST 进程请求的锁模式(0~6)
CTIME 当前模式的时间

BLOCK 为1代表阻碍者,表示正在阻碍其它会话

  1. --查找正在阻碍其它会话(阻碍者)的会话--sid为138的会话正在阻碍其它的会话
  2. SQL>SELECTt.ADDR,
  3. 2t.KADDR,
  4. 3t.SID,
  5. 4t.TYPE,
  6. 5t.ID1,
  7. 6t.ID2,
  8. 7t.LMODE,
  9. 8t.REQUEST,
  10. 9t.CTIME,
  11. 10t.BLOCK
  12. 11FROMv$lockt
  13. 12WHEREt.BLOCK=1
  14. 13ORDERBYt.CTIMEDESC;
  15. ADDRKADDRSIDTYPEID1ID2LMODEREQUESTCTIMEBLOCK
  16. ------------------------------------------------------------------------------------------
  17. 289E1F90289E1FA8138TM5143406010921
  18. 28A4917C28A49298138TX393262353605381
  19. SQL>
  20. --查找正在阻碍其它会话(阻碍者)的会话--sid为138会话的详细信息
  21. SQL>SELECTt1.SID,
  22. 2t1.SERIAL#,
  23. 3t1.USERNAME,
  24. 4t2.TYPE,
  25. 5t2.ID1,
  26. 6t2.ID2,
  27. 7t2.LMODE,
  28. 8t2.REQUEST,
  29. 9t2.CTIME,
  30. 10t2.BLOCK
  31. 11FROMv$sessiont1,v$lockt2
  32. 12WHEREt1.SID=t2.SID
  33. 13ANDt1.USERNAMEISNOTNULL--USERNAME为NULL代表oracle后台进程
  34. 14ANDt2.BLOCK=1
  35. 15ORDERBYt2.CTIMEDESC;
  36. SIDSERIAL#USERNAMETYPEID1ID2LMODEREQUESTCTIMEBLOCK
  37. ------------------------------------------------------------------------------------------------------------------
  38. 1382SYSTM5143406011221
  39. 1382SYSTX393262353605681
  40. --如果锁类型为(TYPE)为TM,v$lock.ID1代表锁定的对象id(dba_objects.OBJECT_ID).
  41. SQL>SELECTt.owner,t.object_nameFROMdba_objectstWHEREt.object_id=51434;
  42. OWNEROBJECT_NAME
  43. --------------------------------------------------------------------------------------------------------------
  44. SYST_LOCK
  45. /**如果锁类型为(TYPE)为TX:
  46. *v$lock.ID1代表v$transaction.XIDUSN和v$transaction.XIDSLOT,(ID1的高16位为XIDUSN,低16位为XIDSLOT)。
  47. *v$lock.ID2为v$transaction.XIDSQN。
  48. *
  49. *以下是ID1,ID2与v$transaction列的转换
  50. */
  51. SQL>SELECTs.XIDUSN,s.XIDSLOT,s.XIDSQNFROMv$transactionsWHEREs.XIDSQN=353;
  52. XIDUSNXIDSLOTXIDSQN
  53. ------------------------------
  54. 646353
  55. --ID1转换为v$transaction.XIDUSN和v$transaction.XIDSLOT,正好与上面sql相同结果
  56. SQL>SELECTtrunc(393262/power(2,16))XIDUSN,
  57. 2bitand(393262,to_number('ffff','xxxx'))+0XIDSLOT
  58. 3FROMdual;
  59. XIDUSNXIDSLOT
  60. --------------------
  61. 646
  62. SQL>
  63. --查找被阻塞(正在等待)会话执行的sql,
  64. SQL>SELECTt1.SID,
  65. 2t1.SERIAL#,
  66. 3t1.USERNAME,
  67. 4t2.CTIME,
  68. 5t2.TYPE,
  69. 6t2.REQUEST,
  70. 7t3.PIECE,
  71. 8t3.SQL_TEXT
  72. 9FROMv$sessiont1,v$lockt2,v$sqltextt3
  73. 10WHEREt1.SID=t2.SID
  74. 11ANDt1.USERNAMEISNOTNULL
  75. 12ANDt1.LOCKWAIT=t2.KADDR
  76. 13--ANDt3.SQL_ID=t1.SQL_ID
  77. 14ANDt3.ADDRESS=t1.SQL_ADDRESS
  78. 15ANDt3.HASH_VALUe=t1.SQL_HASH_VALUE
  79. 16ORDERBYt2.CTIMEDESC,t3.PIECE;
  80. SIDSERIAL#USERNAMECTIMETYPEREQUESTPIECESQL_TEXT
  81. ---------------------------------------------------------------------------------------------------------------------------
  82. 13152SYS3499TM40locktablet_lockinsharemode
  83. 15028SYS3036TX60updatetsettext='jerry'whereid=1
  84. --查看阻碍者阻塞了哪些会话
  85. SQL>SELECTt1.SID,
  86. 2t1.USERNAME,
  87. 3t1.BLOCKING_SESSION,
  88. 4t1.BLOCKING_SESSION_STATUS
  89. 5FROMv$sessiont1
  90. 6WHEREt1.LOCKWAITISNOTNULL
  91. 7ANDt1.BLOCKING_SESSION=138
  92. 8--ANDt1.USERNAMEISNOTNULL
  93. 9ORDERBYt1.SID;
  94. SIDUSERNAMEBLOCKING_SESSIONBLOCKING_SESSION_STATUS
  95. -------------------------------------------------------------------------------
  96. 131SYS138VALID--ACTIVE-SessioncurrentlyexecutingSQL
  97. 150SYS138VALID
  98. --kill会话,当确定了会话之后,可以kill,对于oracle进程要慎重
  99. SQL>altersystemkillsession'131,52';
  100. Systemaltered

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值