首先了解乙個概念,沒有併發就沒有鎖。
select s.sql_id,
parsing_schema_name,
sql_fulltext,
t.status
, start_time,
last_active_time,
last_load_time
from v$transaction t, v$sql s
where s.last_active_time = t.start_date
and parsing_schema_name !=
'sys'
;
select s1.username ||
'@'|| s1.machine ||
' ( sid='
|| s1.sid ||
' ) is blocking '
|| s2.username ||
'@'|| s2.machine ||
' ( sid='
|| s2.sid ||
' ) '
as blocking_status
from **$lock l1, **$session s1, **$lock l2, **$session s2
where s1.sid = l1.sid
and s2.sid = l2.sid
and l1.block =
1and l2.request >
0and l1.id1 = l2.id1
and l2.id2 = l2.id2;
–根據sid 殺掉回話
select sid,
serial
#, username
from v$session
where sid in
(select blocking_session from v$session
);
alter system kill
session
'sid,serial#'
;
查詢已經執行過的並且鎖住別的會話的sql(執行完未提交的sql語句) --------------(持有鎖的會話):
–首先查出持有鎖的會話的sid
@?/rdbms/admin/utllockt.sql
–持有者的sql要查v$ sqlarea裡的sql_id 或v$session 裡的prev_sql_id 列值是相等的,然後執行下面語句:
select a.username, a.sid, b.sql_text, b.sql_fulltext
from v$session a, v$sqlarea b
where a.prev_sql_id = b.sql_id
and a.sid =
&sid;
根據sid查詢某個會話已經發出sql語句但被鎖定 未真正執行完成的sql語句-----------(被鎖定的會話):
–首先查出被鎖的會話的sid
@?/rdbms/admin/utllockt.sql
然後執行下面語句:
select vn.sid, vn.
serial
#, vl.sql_text, vl.sql_id
from v$sql vl, v$session vn
where vl.address =
decode(vn.sql_address,
null
, vn.prev_sql_addr, vn.sql_address)
and vn.sid =
&sid;
事務併發 樂觀鎖
怎樣實現事務的隔離呢?隔離機制的實現必須使用鎖 serializable隔離級別最高,效率最低 一般都不修改隔離級別,如果要改,問dba 資料庫管理員 新增乙個私有欄位integer version,不由程式設計師維護,由jpa自己維護 version private integer version...
事務 鎖 併發 問題
sql server鎖型別 1 holdlock 在該錶上保持共享鎖,直到整個事務結束,而不是在語句執行完立即釋放所新增的鎖。2 nolock 不新增共享鎖和排它鎖,當這個選項生效後,可能讀到未提交讀的資料或 髒資料 這個選項僅僅應用於select語句。3 paglock 指定新增頁鎖 否則通常可能...
oracle事務與鎖
一.事務有4個特性,它們分別是原子性,一致性,分離性,永續性.1 原子性 事務的原子性是指,事務中程式是資料庫的邏輯工作單位,它對資料的修改要麼全部執行,要麼完全不執行.原子也意味著不可分割,不管有多少程式,只要在同乙個事務中,那麼它們就是乙個整體,如果都執行成功才意味著該事務成功,而有乙個操作失敗...