找到鎖表的人

2021-08-25 10:02:31 字數 1588 閱讀 6008

在公司解決 oracle 鎖表問題時查到的資料:

select a.object_name,

l.session_id,

l.oracle_username,

l.os_user_name,

s.machine,

s.sid,

s.sql_address,

s.sql_hash_value,

s.sql_id,

s.sql_child_number

from v$session s, v$locked_object l, all_objects a

where l.process = s.process

and a.object_id = l.object_id

這段可以查到所有被鎖的 session 和表,包括導致鎖表的第一次 sql 操作的 session。最重要的,它可以找出是誰鎖的,你可直接找他 pk 或者殺掉他的 session。

select c.object_name,

l.session_id,

l.oracle_username,

s.machine,

l.os_user_name,

s.sid,

s.program,

st.sql_text

from v$session s,

v$locked_object l,

all_objects c,

v$sqltext_with_newlines st

where s.process = l.process

and c.object_id = l.object_id

and st.address = s.sql_address

order by s.sid, st.piece

如果有一條或多條 sql 被阻塞住了,你可以通過這段 sql 找出被阻塞的 sql 是什麼,從而定位出是哪位記錄被鎖住了。

select s.username user_name,

o.owner || '.' || o.object_name object_name,

s.sid || ',' || s.serial# sid_serial#,

s.program,

sq.sql_text

from dba_objects o, v$session s, v$lock v, v$sqltext_with_newlines sq

where v.id1 = o.object_id

and v.sid = s.sid

and (v.type = 'tm' or v.type = 'hw')

and s.sql_address = sq.address

order by program, object_name, s.sid, sq.piece;

這段與上面那段作用一樣,不過顯示的資訊多少有點差別,由我們公司一們大牛提供。

Oracle 鎖表 鎖表查詢 結束鎖表程序

1.oracle 鎖表 lock table 表名字in exclusive mode 所記錄 select from 表名字 for update 2.oracle 鎖表查詢 selectb.owner,b.object name,a.session id,a.locked mode from v...

mysql事物鎖鎖表 mysql 事務 行鎖 表鎖

一 準備 select from information schema.innodb trx 查詢事務 select from information schema.innodb locks 查詢鎖 select from information schema.innodb lock waits 暫...

mysql鎖表測試 mysql 行鎖,表鎖 測試

環境 mysql5.5,引擎innodb,sqlyog 行鎖,表鎖區別 其實就是看where後面的條件是否有有索引,有索引的時候就是行鎖,沒有索引的時候就是表索。先建立表結構 create table lock test id int 11 not null auto increment,name ...