最近項目項目開始忙起來了,就不嗶嗶了,直接給你們看東西好了。
查鎖表
select a.OS_USER_NAME, c.owner, c.object_name, b.sid, b.serial#, logon_time
from v$locked_object a, v$session b, dba_objects c
where a.session_id = b.sid
and a.object_id = c.object_id
order by b.logon_time;
解鎖
ALTER SYSTEM KILL SESSION '129,77';
查什么系統導致上的鎖
select spid, osuser, s.program
from v$session s,v$process p
where s.paddr=p.addr and s.sid=129
查看什么語句導致鎖表的
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#;
查看有幾個表被鎖
select count(*) from v$locked_object;
查表SPID
129是通過查鎖表查出來的SID
select spid, oSUSEr, s.program
from v$session s,v$process p
where s.paddr=p.addr and s.sid=129
當Kill不能解鎖時,Ctrl+R CMD 輸入下面這句,結束線程。
22860是Oracle鎖表線程IP,你自己要替換一下你自己的,怎么查,上面分享了
orakill orcl 22860
鎖表可能原因
1、鎖表的原理:數據庫使用獨占式封鎖機制,當執行上面的語句時,對表進行鎖住,直到發生commite 或者 回滾 或者退出數據庫用戶
2、主要的鎖表原因有:
(1) A程序執行了對 tableA 的 insert ,並還未 commite時,B程序也對tableA 進行insert 則此時會發生資源正忙的異常 就是鎖表
(2)鎖表常發生於並發而不是並行(並行時,一個線程操作數據庫時,另一個線程是不能操作數據庫的,cpu 和i/o 分配原則)
3、減少鎖表的概率方法:
(1)減少insert 、update 、delete 語句執行 到 commite 之間的時間。具體點批量執行改為單個執行、優化sql自身的非執行速度
(2)如果異常對事物進行回滾
2、主要的鎖表原因有:
(1) A程序執行了對 tableA 的 insert ,並還未 commite時,B程序也對tableA 進行insert 則此時會發生資源正忙的異常 就是鎖表
(2)鎖表常發生於並發而不是並行(並行時,一個線程操作數據庫時,另一個線程是不能操作數據庫的,cpu 和i/o 分配原則)
3、減少鎖表的概率方法:
(1)減少insert 、update 、delete 語句執行 到 commite 之間的時間。具體點批量執行改為單個執行、優化sql自身的非執行速度
(2)如果異常對事物進行回滾