在公司解決 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 ...