基于oracle中锁的深入理解

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):独立访问使用

数字越大锁级别越高, 影响的操作越多。1级锁有:Select,有时会在v$locked_object出现。

2级锁有:Select for update,Lock For Update,Lock Row Share

select for update当对话使用for update子串打开一个光标时,所有返回集中的数据行都将处于行级(Row-X)独占式锁定,其它对象只能查询这些数据行,不能进行update、delete或select for update操作。

3级锁有:Insert, Update, Delete, Lock Row Exclusive

没有commit之前插入同样的一条记录会没有反应, 因为后一个3的锁会一直等待上一个3的锁, 我们必须释放掉上一个才能继续工作。

4级锁有:Create Index, Lock Share locked_mode为2,3,4不影响DML(insert,delete,update,select)操作, 但DDL(alter,drop等)操作会提示ora-00054错误。

ORA-00054: resource busy and acquire with NOWAIT specified

(ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源)

5级锁有:Lock Share Row Exclusive

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

当对父表进行修改时,若子表对应的记录存在,则产生ORA-02292

异常;否则只对父表加TX锁和RX锁;

当对子表进行修改时,则除了对子表加加TX锁和RX锁外;对父表

也加了加SS锁,这符合逻辑,因为父表此时必须满足参考完整性;

也就是,对父表加SS锁,避免此时对父表进行修改操作。

上面锁说的修改,都是对子父表存在参考完整性的字段操作的。

6级锁有:Alter table, Drop table, Drop Index, Truncate table, Lock Exclusive

以DBA角色:

col owner for a12

col object_name for a30

col machine for a32

col USERNAME for a16

col OSUSER for a16

查看当前会话sid:

select sid from v$mystat where rownum<=1 ;

查看当前session情况:

select machine,username,sid,serial#,type,osuser,status from v$session;

查看当前数据库里锁的情况可以用如下SQL语句:

select s.username,o.object_name,s.machine,s.sid,s.serial#,k.type

from v$locked_object l,dba_objects o ,v$session s,v$lock k

where l.object_id  =  o.object_id and l.session_id=s.sid and k.sid=s.sid

如果有长期出现的一列,可能是没有释放的锁。我们可以用下面SQL语句杀掉长期没有释放非正常的锁:alter system kill session 'sid,serial#';如果出现了锁的问题, 某个DML操作可能等待很久没有反应。

如果利用上面的命令杀死一个进程后,进程状态被置为"killed",但是锁定的资源很长时间没有被释放,那么可以在os一级再杀死相应的进程(线程),首先执行下面的语句获得进程(线程)号:

select spid, osuser, s.program

from v$session s,v$process p

where s.paddr=p.addr and s.sid=#sid (#sid是上面查到的sid)

4.在OS上杀死这个进程(线程):

1)在unix上,用root身份执行命令:#kill -9 #spid(即上面查到的spid)2)在windows用orakill杀死线程,orakill是oracle提供的一个可执行命令,语法为:orakill sid thread其中:sid:表示要杀死的进程属于的实例名

thread:是要杀掉的线程号,即上面查到的spid。

例:c:>orakill orcl #spid当采用的是直接连接数据库的方式,也不要用OS系统命令 $kill process_num 或者 $kill -9 process_num来终止用户连接,因为一个用户进程可能产生一个以上的锁, 杀OS进程幷不能彻底清除锁的问题。

rs和rx的区别在什么地方?Row Exclusive (RX): INSERT, UPDATE, DELETE

Row Share (RS): SELECT... FOR UPDATE两者都是TM table lock modes held by DML transactions。还是有一点区别的,一是产生的不一样。二是rx锁后,其他transactions甚至都读不到更改后的结果。而rs对其他 transactions而言读是没有问题的,所以叫它rs。虽然都是指在表的层面上Prevents other transactions from manually locking the table, 一个是for exclusive reading or writing,而另一个是for exclusive write access. 这也就是rs的s(share)表现的地方。

相关阅读:

php截取视频指定帧为图片

PHP统计二维数组元素个数的方法

JavaScript+html5 canvas实现图片破碎重组动画特效

C#微信开发之微信公众号标签管理功能

微软延长Skylake Win7/8.1系统的支持期限:2023年

javascript算法题:求任意一个1-9位不重复的N位数在该组合中的大小排列序号

php笔记之:初探PHPcms模块开发介绍

js漂浮广告实现代码

js window.onload 加载多个函数和追加函数详解

js onload事件不起作用示例分析

win10系统升级提示错误代码0x80070006-0x2000c该怎么解决

实例解析如何在Android应用中实现弹幕动画效果

C#实现文件与二进制互转并存入数据库

动态创建script标签实现跨域资源访问的方法介绍

oracle 几种锁,oracle_基于oracle中锁的深入理解,ORACLE里锁有以下几种模式:0:no - phpStudy...相关推荐

  1. python实现单例模式的几种方式_基于Python中单例模式的几种实现方式及优化详解...

    单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. ...

  2. oracle 图片 显示不出,Sql Server 中image类型迁移到Oracle 中Blob类型出现图片显示不出来,why????请博客们帮忙 | 学步园...

    我现在在一项目中碰到这么一个问题 Sql Server 中image类型迁移到Oracle Blob类型出现图片显示不出来,我在Sql Server 中看了一条image数据 如下: 1.Sql Se ...

  3. mysql乐观锁与事务_Mysql中的读锁,写锁,乐观锁及事务隔离级别和并发问题

    mysql读锁,写锁,乐观锁 读锁,也叫共享锁(shared lock) SELECT * FROM table_name  WHERE ...  LOCK IN SHARE MODE 写锁,也叫排他 ...

  4. oracle直截取汉字,ORACLE_从字符串中提取汉字(不包括全角符及日文韩文等字符) | 学步园...

    转载自:http://blog.csdn.net/atgc/article/details/2036799 感谢网友ATGC ,这个问题研究了一天,终于搞定!! 从表里提取汉字, 需要考虑字符集, 不 ...

  5. oracle 天转换成月函数_oracle中to_date详细用法示例(oracle日期格式转换)

    TO_DATE格式(以时间:2007-11-02 13:45:25为例) 1. 日期和字符转换函数用法(to_date,to_char) select to_char(sysdate,'yyyy-mm ...

  6. mysql跨进程锁_python基于mysql实现的简单队列以及跨进程锁

    在我们做多进程应用开发的过程中,难免会遇到多个进程访问同一个资源(临界资源)的状况,必须通过加一个全局性的锁,来实现资源的同步访问(同一时间只能有一个进程访问资源). 举个例子: 假设我们用mysql ...

  7. 磁盘一把锁一个感叹号_TBase中的一些锁

    1.前言 锁在生活中随处可见,电子锁.挂锁.门锁等等.在数据库中,同样也存在着各式各样的锁,表级锁.行级锁.页锁等等,数据库的并发能力除了和它的并发控制机制有关, 还和数据库的锁粒度控制息息相关,粒度 ...

  8. 随机数在java 自旋锁的运用_Java 中自旋锁的实现

    Java中初始是使用mutex互斥锁,因为互斥锁是会线程等待挂起,而对获取锁后的操作时间比较短暂的应用场景来说,这样的锁会让竞争锁的线程不停的park,unpark 的操作,这样的系统的调用性能是非常 ...

  9. php oracle 锁表,CSS_ORACLE 中关于锁表的问题,ORACLE里锁有以下几种模式:- phpStudy...

    ORACLE 中关于锁表的问题 ORACLE里锁有以下几种模式: 0:none 1:null 空 2:Row-S 行共享(RS):共享表锁 3:Row-X 行专用(RX):用于行的修改 4:Share ...

最新文章

  1. 在线作图丨如何绘制精美的3D饼图
  2. 区块链行业报告|从交易流程到Token经济的全方位解析
  3. python下的橡皮线_python线性代数常用操作
  4. 算个欧拉函数给大家助助兴(米勒拉宾(判断素数)+Pollard_rho(求一个大数的因子 ))
  5. 直播画面抖动_罗永浩直播带货1.1个亿,企业想玩网络直播,三大专业设备你必须知道...
  6. php定义数据表类,phpwind中的数据库操作类
  7. Get与Post区别与范例讲解
  8. php session auto_start,PHP出现 Warning: session_start()的解决方法
  9. 【实习周报】2019年4月 前端开发实习工作周报汇总
  10. [转]如何学好windows c++编程 学习精髓(收集,整理)
  11. mysql获取姓名拼音首字母_C# 汉字获取拼音首字母,给数据库中的姓名添加首字母...
  12. LL(1)语法分析实验报告
  13. css实现多行文本时显示省略号
  14. 被误解的鸟枪换炮:实体资产通证化没那么容易
  15. C++ VARIANT数据类型操作详解
  16. 接口参数加解密,代码无侵入这样做方便多了
  17. Node.js系列-----数据库MySQL
  18. 《MongoDB极简教程》第一章 NoSQL简史 amp; MongoDB安装amp;环境配置
  19. 【编码规范篇】| C#编码规范 代码规范总结,包括命名规范,代码规范 注释规范等
  20. 简单工厂创建不同几何图形(Java代码实例)

热门文章

  1. 无痕搜索:10款最佳隐私搜索引擎
  2. thinkph5.1 简单自定义的日志写入方法
  3. 惠普服务器风扇为什么有两种型号,HP DL380 G6风扇满速原因
  4. 使用CMD满速下载百度云
  5. 如何卸载IE9恢复IE8浏览器?
  6. 如何去除discuz X2论坛网址中的forum.php
  7. 主分区、扩展分区和逻辑分区的区别
  8. 安装python的基本流程
  9. mybatis一对多,多对一映射,collection和association标签的使用
  10. 光伏发电并网逆变simulink/matlab仿真