select * from tablename ... for update --------------------------------------- 加行锁 表级锁:当事务获得行锁后,此事务也将自动获得该行的表锁(共享锁), 以防止其它事务进行DDL语句影响记录行的更新。事务也可以在进行过程 中获得共享锁或排它锁,只有当事务显示使用LOCK TABLE语句显式的 定义一个排它锁时,事务才会获得表上的排它锁,也可使用 LOCK TABLE 显式的定义一个表级的共享锁 在编程当中怎样避免锁? -------------------- 锁定机制是解决并发问题的有效方式,例如防止多个会话同时修改表中的 同一行。 只要尽快提交事务(commit),oracle 就会释放锁; 死锁:当两个事务需要一组有冲突的锁,而不能将事务继续下去的话,就会 出现死锁。 找出导致死锁的会话: select /*+ NO_MERGE(a) NO_MERGE(b) NO_MERGE(c) */ 'Wait' "Status", a.username, a.machine, a.sid, a.serial#, a.last_call_et "Seconds", b.id1, c.sql_text "SQL" from v$session a, v$lock b, v$sqltext c where a.username is not null and a.lockwait = b.kaddr and c.hash_value =a.sql_hash_value union select /*+ NO_MERGE(a) NO_MERGE(b) NO_MERGE(c) */ 'Lock' "Status", a.username, a.machine, a.sid, a.serial#, a.last_call_et "Seconds", b.id1, c.sql_text "SQL" from v$session a, v$lock b, v$sqltext c where b.id1 in (select /*+ NO_MERGE(d) NO_MERGE(e) */ distinct e.id1 from v$session d, v$lock e where d.lockwait = e.kaddr) and a.username is not null and a.sid = b.sid and b.request=0 and c.hash_value =a.sql_hash_value; 杀掉导致死锁的进程: alter system kill session 'SID,Serial#'
---------------------------------------
加行锁 表级锁:当事务获得行锁后,此事务也将自动获得该行的表锁(共享锁),
以防止其它事务进行DDL语句影响记录行的更新。事务也可以在进行过程
中获得共享锁或排它锁,只有当事务显示使用LOCK TABLE语句显式的
定义一个排它锁时,事务才会获得表上的排它锁,也可使用 LOCK TABLE
显式的定义一个表级的共享锁 在编程当中怎样避免锁?
--------------------
锁定机制是解决并发问题的有效方式,例如防止多个会话同时修改表中的
同一行。 只要尽快提交事务(commit),oracle 就会释放锁; 死锁:当两个事务需要一组有冲突的锁,而不能将事务继续下去的话,就会
出现死锁。 找出导致死锁的会话:
select /*+ NO_MERGE(a) NO_MERGE(b) NO_MERGE(c) */ 'Wait' "Status", a.username, a.machine,
a.sid, a.serial#, a.last_call_et "Seconds", b.id1, c.sql_text "SQL"
from v$session a, v$lock b, v$sqltext c
where a.username is not null
and a.lockwait = b.kaddr
and c.hash_value =a.sql_hash_value
union
select /*+ NO_MERGE(a) NO_MERGE(b) NO_MERGE(c) */ 'Lock' "Status", a.username, a.machine,
a.sid, a.serial#, a.last_call_et "Seconds", b.id1, c.sql_text "SQL"
from v$session a, v$lock b, v$sqltext c
where b.id1 in
(select /*+ NO_MERGE(d) NO_MERGE(e) */ distinct e.id1
from v$session d, v$lock e
where d.lockwait = e.kaddr)
and a.username is not null
and a.sid = b.sid
and b.request=0
and c.hash_value =a.sql_hash_value;
杀掉导致死锁的进程: alter system kill session 'SID,Serial#'