IT猫扑网:您身边最放心的安全下载站! 最新更新|软件分类|软件专题|手机版|论坛转贴|软件发布

您当前所在位置:首页数据库Oracle → oracle锁表

oracle锁表

时间:2015/6/28来源:IT猫扑网作者:网管联盟我要评论(0)

  查询表的状况的对象:V$LOCK, V$LOCKED_OBJECT, V$SESSION, V$SQLAREA, V$PROCESS

  select * from v$locked_object

  select * from dba_objects

  方法:

  首先查看那些表被锁住了

  -----------------------------------------------------------------

  select b.owner, b.object_name, a.session_id, a.locked_mode

  from v$locked_object a, dba_objects b

  where b.object_id = a.object_id;

  -----------------------------------------------------------------

  select b.username, a.LOCKED_MODE, b.sid, b.serial#, logon_time

  from v$locked_object a, v$session b

  where a.session_id = b.sid

  order by b.logon_time;

  -----------------------------------------------------------------

  select b.sid,

  b.serial#,

  c.object_name,

  b.username,

  a.LOCKED_MODE,

  b.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 'SID,SERIAL#';

  例如:

  alter system kill session '29,5497';

  ------------------------------------------------

  SELECT S.SID SESSION_ID,

  S.USERNAME,

  s.SERIAL#,

  DECODE(LMODE,

  0,

  'None',

  1,

  'Null',

  2,

  'Row-S (SS)',

  3,

  'Row-X (SX)',

  4,

  'Share',

  5,

  'S/Row-X (SSX)',

  6,

  'Exclusive',

  TO_CHAR(LMODE)) MODE_HELD,

  DECODE(REQUEST,

  0,

  'None',

  1,

  'Null',

  2,

  'Row-S (SS)',

  3,

  'Row-X (SX)',

  4,

  'Share',

  5,

  'S/Row-X (SSX)',

  6,

  'Exclusive',

  TO_CHAR(REQUEST)) MODE_REQUESTED,

  O.OWNER || '.' || O.OBJECT_NAME || ' (' || O.OBJECT_TYPE || ')',

  S.TYPE LOCK_TYPE,

  L.ID1 LOCK_ID1,

  L.ID2 LOCK_ID2

  FROM V$LOCK L, SYS.DBA_OBJECTS O, V$SESSION S

  WHERE L.SID = S.SID

  AND L.ID1 = O.OBJECT_ID;

  oracle里锁有以下几种模式:

  0:none

  1:null 空

  2:Row-S 行共享(RS):共享表锁

  3:Row-X 行专用(RX):用于行的修改

  4:Share 共享锁(S):阻止其他DML操作

  5:S/Row-X 共享行专用(SRX):阻止其他事务操作

  6:exclusive 专用(X):独立访问使用

  数字越大锁级别越高, 影响的操作越多。

  一般的查询语句如select ... from ... ;是小于2的锁, 有时会在v$locked_object出现。

  select ... from ... for update; 是2的锁。

  当对话使用for update子串打开一个游标时,

  所有返回集中的数据行都将处于行级(Row-X)独占式锁定,

  其他对象只能查询这些数据行,不能进行update、delete或select...for update操作。

  insert / update / delete ... ; 是3的锁。

  没有commit之前插入同样的一条记录会没有反应,

  因为后一个3的锁会一直等待上一个3的锁, 我们必须释放掉上一个才能继续工作。

  创建索引的时候也会产生3,4级别的锁。

  locked_mode为2,3,4不影响DML(insert,delete,update,select)操作,

  但DDL(alter,drop等)操作会提示ora-00054错误。

  有主外键约束时 update / delete ... ; 可能会产生4,5的锁。

  DDL语句时是6的锁。

关键词标签:oracle锁表

相关阅读

文章评论
发表评论

热门文章 Oracle中使用alter table来增加,删除,修改列Oracle中使用alter table来增加,删除,修改列oracle中使用SQL语句修改字段类型-oracle修oracle中使用SQL语句修改字段类型-oracle修使用低权限Oracle数据库账户得到管理员权限使用低权限Oracle数据库账户得到管理员权限Oracle对user的访问控制Oracle对user的访问控制

相关下载

人气排行 ORACLE SQL 判断字符串是否为数字的语句Oracle中使用alter table来增加,删除,修改列的语法ORACLE和SQL语法区别归纳(1)oracle grant 授权语句如何加速Oracle大批量数据处理Oracle删除表的几种方法ORACLE修改IP地址后如何能够使用Oracle 10g创建表空间和用户并指定权限