簡單快捷的檢視鎖表和解鎖方法,需在命令列執行
-- 檢視鎖表記錄
select object_name,machine,s.sid,s.serial#
from v$locked_object l,dba_objects o ,v$session s
where l.object_id = o.object_id and l.session_id=s.sid;
-- 解鎖表 sid serial#' 與查詢結果的資料對應
alter system kill session 'sid,serial#';
----------------- 詳細說明 --------------------------------------
--kill session語句
alter system kill session 'sid,serial#';
--以下幾個為相關表
select * from v$lock;
select * from v$sqlarea;
select * from v$session;
select * from v$process ;
select * from v$locked_object;
select * from all_objects;
select * from v$session_wait;
--1.查出鎖定object的session的資訊以及被鎖定的object名
select l.session_id sid, s.serial#, l.locked_mode,l.oracle_username,
l.os_user_name,s.machine, s.terminal, o.object_name, s.logon_time
from v$locked_object l, all_objects o, v$session s
where l.object_id = o.object_id
and l.session_id = s.sid
order by sid, s.serial# ;
--2.查出鎖定表的session的sid, serial#,os_user_name, machine name, terminal和執行的語句
--比上面那段多出sql_text和action
select l.session_id sid, s.serial#, l.locked_mode, l.oracle_username, s.user#,
l.os_user_name,s.machine, s.terminal,a.sql_text, a.action
from v$sqlarea a,v$session s, v$locked_object l
where l.session_id = s.sid
and s.prev_sql_addr = a.address
order by sid, s.serial#;
--3.查出鎖定表的sid, serial#,os_user_name, machine_name, terminal,鎖的type,mode
select s.sid, s.serial#, s.username, s.schemaname, s.osuser, s.process, s.machine,
s.terminal, s.logon_time, l.type
from v$session s, v$lock l
where s.sid = l.sid
and s.username is not null
order by sid;
這個語句將查詢到資料庫中所有的dml語句產生的鎖,還可以發現,
任何dml語句其實產生了兩個鎖,乙個是表鎖,乙個是行鎖。
殺鎖命令
alter system kill session 'sid,serial#'
select /*+ rule */ s.username,
decode(l.type,'tm','table lock',
'tx','row lock',
null) lock_level,
o.owner,o.object_name,o.object_type,
s.sid,s.serial#,s.terminal,s.machine,s.program,s.osuser
from v$session s,v$lock l,dba_objects o
where l.sid = s.sid
and l.id1 = o.object_id(+)
and s.username is not null
如果發生了鎖等待,我們可能更想知道是誰鎖了表而引起誰的等待
以下的語句可以查詢到誰鎖了表,而誰在等待。
以上查詢結果是乙個樹狀結構,如果有子節點,則表示有等待發生。
如果想知道鎖用了哪個回滾段,還可以關聯到v$rollname,其中xidusn就是回滾段的usn
col user_name format a10
col owner format a10
col object_name format a10
col object_type format a10
select /*+ rule */ lpad(' ',decode(l.xidusn ,0,3,0))||l.oracle_username user_name,
o.owner,o.object_name,o.object_type,s.sid,s.serial#
from v$locked_object l,dba_objects o,v$session s
where l.object_id=o.object_id
and l.session_id=s.sid
order by o.object_id,xidusn desc
Mysql 鎖表與解鎖
使用lock tables後,在鎖定期間需要在其他執行緒使用其他別的未鎖定表,需要慎用鎖定,可能讀寫失敗等奇怪現象 參考 寫鎖定 lock tables lrcolumnsdesc write 寫鎖,鎖定之後,只有當前執行緒只可以對lrcolumnsdesc進行讀操作和寫操作,其他執行緒對對prod...
mysql 鎖表與解鎖
連線mysql 直接執行unlock tables,細節如下 查詢是否鎖表 show open tables 查詢程序 show processlist 查詢到相對應的程序,然後殺死程序 kill id 一般到這一步就解鎖了 檢視正在鎖的事務 select from information sche...
oracle mysql檢視鎖表與解鎖表
在開發的時候,有時候不管是通過cmd運算元據庫 還是通過資料庫工具運算元據庫,有時候不正當的操作會將表鎖了 從開發的角度來看,表現為當在程式中通過 對資料庫進行更新 刪除 新增操作時候,執行無效,有時候還會等待與異常丟擲。在orcla與mysql中,如何檢視鎖表與解鎖表 select from v ...