锁定的一些

 

v$lock表:

官方文档很详细

几种模式:

 row exclusive 这个锁定模式发生在更新表的一行或者多行时出现,就是tx锁的exclusive模式。

 share lock 这个模式的锁定只允许别的事务查询或者锁定特定的记录,不能够delete,update,insert;

 share row exclusive 用于查看整个表,不允许别的事务以share模式锁定表或更新表中的记录,只允许带update的select语句。

 exclusive 事务以独占的方式写一个表,不允许DML。

  常用的锁定判断查询:

select id1,id2,sid,type,decode(lmode,0,'none',1,'null',2,'row share',3,'row exclusive',4,'share',5,'share row exclusive',6,'exclusive') lmode,decode(request,0,'none',1,'null',2,'row share',3,'row exclusive',4,'share',5,'share row exclusive',6,'exclusive') request,ctime,block from v$lock;

注意的id1,id2是依赖于type字段的,type字段常见的两种类型tm(表级锁),tx(行级锁),一般tx锁只有exclusive模式,例如 :

当我们发出一条update 语句时,就会出现tm和tx两个锁:

update emp set sal=20000 where ename='SCOTT';

SQL> select * from v$lock where sid=(select sid from v$mystat where rownum<=1);

ADDR     KADDR           SID TY        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK

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

1EDC4074 1EDC408C        158 TM      52785          0          3          0         78          0    ##注解:sid为用户的v$session中对应的sid,type是表级锁,id1为锁定表的object_id,id2在tm类型时始终为                         0,request为对应锁的争用。ctime对应该用户执有该锁定的时间,一般是3秒更新一次这个字段,block显示锁定是否阻塞了相应的锁定。

1EE12294 1EE123B0        158 TX     327695        637          6          0         78          0   ##tx行级锁只有exclusive模式,id1,id2对应回滚段和slot号(在v$transaction视图中可以看出),经过相应的转换可以得到,在韩思捷的10G OCP中有转换过程。

SQL> select xidusn,xidslot,xidsqn,status from v$transaction;

    XIDUSN    XIDSLOT     XIDSQN STATUS

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

         5         15        637 ACTIVE

SQL> select * from v$locked_object;

    XIDUSN    XIDSLOT     XIDSQN  OBJECT_ID SESSION_ID ORACLE_USERNAME                OS_USER_NAME           PROCESS      LOCKED_MODE

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

         5         15        637      52785        158 SYS                            LY0110RJP\Administrator        764:2956               3

process字段对应是操作系统号764,打开“任务管理器”,查看pid为764对应的进程就是sqlplus。

如果几个session发生锁争用,那么会记录到v$enqueue_lock视图中:

sys用户下:   update scott.emp set sal=20000 where ename='SCOTT';

scott用户下:  update scott.emp set sal=20000 where ename='SCOTT';

 

SQL> select * from v$lock;

ADDR     KADDR           SID TY        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK

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

1EDC4074 1EDC408C        158 TM      52785          0          3          0         12          0

1EDC4138 1EDC4150        159 TM      52785          0          3          0          9          0

1EE29A54 1EE29B70        158 TX     196644        662          6          0         12          1

看到sid为158即sys的锁block了159的锁定要求。

SQL> select * from v$enqueue_lock;

ADDR     KADDR           SID TY        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK

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

1F834394 1F8343A8        159 TX     196644        662          0          6        309          0

159被阻塞,oracle将其放入队列中,这里的锁定lmode为0,即none,因为session还未获得请求的锁定,而它需要(request)的是6即tx行级专有锁。

另外还有一个v$locked_object显示出当前被锁定的对象:

SQL> select * from v$locked_object;

    XIDUSN    XIDSLOT     XIDSQN  OBJECT_ID SESSION_ID ORACLE_USERNAME                OS_USER_NAME           PROCESS      LOCKED_MODE

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

         3         36        662      52785        158 SYS                            LY0110RJP\Administrator        764:2956               3

         0          0          0      52785        159 SCOTT                          LY0110RJP\Administrator        3276:3280              3

看到sid为159的xidusn,xidslot,xidsqn都为0,因为事务被阻塞了,不能获得回滚段和slot槽。

   Lock table emp in share mode nowait;

如果锁定的是视图的话,且视图包含多个基表,那么oracle会同时锁住几个基表:

SQL> create view test01 as select a.ename,b.dname from emp a,dept b where a.deptno=b.deptno;

视图已创建。

SQL> lock table test01 in share mode;

表已锁定。

如果这时我们再尝试锁定相应基表的话,可能被阻塞。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23102627/viewspace-659991/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/23102627/viewspace-659991/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
牙科就诊管理系统利用当下成熟完善的SSM框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的Mysql数据库进行程序开发。实现了用户在线查看数据。管理员管理病例管理、字典管理、公告管理、药单管理、药品管理、药品收藏管理、药品评价管理、药品订单管理、牙医管理、牙医收藏管理、牙医评价管理、牙医挂号管理、用户管理、管理员管理等功能。牙科就诊管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 管理员在后台主要管理病例管理、字典管理、公告管理、药单管理、药品管理、药品收藏管理、药品评价管理、药品订单管理、牙医管理、牙医收藏管理、牙医评价管理、牙医挂号管理、用户管理、管理员管理等。 牙医列表页面,此页面提供给管理员的功能有:查看牙医、新增牙医、修改牙医、删除牙医等。公告信息管理页面提供的功能操作有:新增公告,修改公告,删除公告操作。公告类型管理页面显示所有公告类型,在此页面既可以让管理员添加新的公告信息类型,也能对已有的公告类型信息执行编辑更新,失效的公告类型信息也能让管理员快速删除。药品管理页面,此页面提供给管理员的功能有:新增药品,修改药品,删除药品。药品类型管理页面,此页面提供给管理员的功能有:新增药品类型,修改药品类型,删除药品类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值