Oracle 6 - 锁
Oracle锁没有额外的开销?Oracle的锁是怎么实现的?因为其他数据库,锁都是一种稀有资源和开销。
答:代码级实现??
没有锁的话,并发更新就会有丢失更新的问题。
悲观锁和乐观锁
悲观锁一般用于有状态,有连接的环境下,通常是客户/服务器系统。在更新会话中使用SELECT FOR UPDATE 锁定要更新的那一行。
乐观锁,只有在要更新的时候,才去锁定行。
为了防止出现丢失更新,乐观锁一般采用如下方法。
1.在DML中带上旧值, 比如
UPDATE EMP
SET SALARY = :sal
WHERE empno= :no AND salary= :old_sal
这样的话,如果其他用户已经修改了这一行,那么这个UPDATE就不会修改任何行。
2.增加一个版本列,一般是NUMBER类型或DATETIME 时间戳类型
方法与#1一样,UPDATE的时候在WHERE子句中加上 这个时间戳列
3.校验和
对要更新的这一行,计算一个hash值,ORA_HASH
何时适用悲观锁和乐观锁
(1) 客户/服务器模式适用悲观锁定, 用户不多。
(2) 遗留系统,既有客户/服务器系统(已经使用了悲观锁),又有web访问的系统,那么web系统要适用乐观锁,适用ORA_HASH的方法, 因为我们不希望修改数据库,增加一列,这样遗留系统也要修改。
(3) 其他系统都使用乐观锁。
怎么避免阻塞和死锁
会产生阻塞的语句只有:SELECT
FOR UPDATE, INSERT, DELET, UPDATE, MERGE
(1)
用SELECT FOR UPDATE NO WAIT
(2)
INSERT 很少会产生死锁,除了用户自己生成主键的情况,有重复主键同时要插入数据库
(3)
UPDATE/DELETE/MERGE 可以通过先执行一下 SELECT FOR UPDATE NOWAIT避免。
Oracle 6 - 锁的更多相关文章
- Oracle的锁表与解锁
Oracle的锁表与解锁 SELECT /*+ rule */ s.username, decode(l.type,'TM','TABLE LOCK', 'TX','ROW LOCK', NULL) ...
- 从浅到深掌握Oracle的锁
1.分别模拟insert,update和delete造成阻塞的示例,并对v$lock中的相应的信息进行说明,给 出SQL演示. Insert示例 会话:SQL> select * from ...
- Oracle 6 - 锁和闩 - 锁类型
Oracle锁大类 1.DML锁 (SELECT, INSERT, UPDATE, DELETE, MERGE是对数据库加的锁, 可能是行锁,也可能是表锁) 2.DDL锁 (Create, Alter ...
- ORACLE里锁有以下几种模式,v$locked_object,locked_mode【转】
ORACLE里锁有以下几种模式:0:none1:null 空2:Row-S 行共享(RS):共享表锁,sub share 3:Row-X 行独占(RX):用于行的修改,sub exclusive 4: ...
- oracle查询锁表解锁语句
--oracle查询锁表解锁语句--首先要用dba权限的用户登录,建议用system,然后直接看sql吧 --1. 如下语句 查询锁定的表: SELECT l.session_id sid, s.se ...
- ORACLE的锁机制
数据库是一个多用户使用的共享资源.当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况.若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性. 加锁是实现数据 ...
- ORACLE里锁有以下几种模式,v$locked_object,locked_mode
ORACLE里锁有以下几种模式: 0:none 1:null 空 2:Row-S 行共享(RS):共享表锁,sub share 3:Row-X 行独占(RX):用于行的修改,sub exclusiv ...
- Oracle系列-锁表与解锁解决方案(大招版)-解决问题才是王道
[Oracle系列-锁表与解锁解决方案(大招版)] --1查看被锁的表 select b.owner,b.object_name,a.session_id,a.locked_mode from v$l ...
- Oracle系列-锁表与解锁解决方案(基础版)
[Oracle锁表查询和解锁解决方案] 一.了解原因(借鉴整理) 数据库操作语句的分类 DDL:数据库模式定义语言,关键字:createDML:数据操纵语言,关键字:Insert.delete.upd ...
随机推荐
- 【风马一族_Java】在某个范围内,找出具有水仙花特征的数字
打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身.例如: 153是一个"水仙花数",因为153=1的三 ...
- ISE 中使用system generate
本文讲解简单的ISE中使用system generate,system generate基本使用规则在此不详细说明可以见博客http://blog.csdn.net/xiabodan/article/ ...
- Windows7系统禁用USB和启用USB方法
被迫装了XX软件之后,无线网络和USB都被禁用了,XX软件还不能被卸载.只能用PE进去时候把XX软件安装目录进行删除,但是删除之后还是不能识别U盘,从网上找到办法一看是注册表的项被修改了. 注册表项为 ...
- 玄机宝盒v1.6.1.1
最新版本:玄机宝盒v1.6.1.1 玄机宝盒v1.6.1.1 04-14/2016 给你的将是无与伦比的体验http://bbs.msdn5.com/thread-15-1-1.html(出处: 玄机 ...
- c#使用easyhook库进行API钩取
目标:使calc程序输入的数自动加1 (当别人使用时,总会得不到正确的结果,哈哈) 编写注入程序 ————————————————————————————————— class Program中的方法 ...
- JS模板Handlebars的使用和有效组织
应用背景 我们在做项目时,为了使页面模块高度复用,使用页面模板是必须的,我想大家通常可能会新建MVC的项目,然后在页面中使用Razor引擎,新建Helper模板类,前后台代码的混写,简洁高效,一切 ...
- c++中string类的详解
,<时返回-1,==时返回0 string的子串:string substr(int pos = 0,int n = npos) const;//返回pos开始的n个字符组成的字符串strin ...
- ZOJ 3229 有上下界最大流
1: /** 2: ZOJ 3229 有上下界的最大流 3: 两次求最大流的过程,非二分 4: 有源汇上下界的最大流问题, 首先连接 sink -> src, [0,INF]. 5: 根据net ...
- 微软职位内部推荐-Senior Android Developer
微软近期Open的职位: Position: Senior SDE-- Mobile Products Android/iOS/WP Senior Developer Contact Person: ...
- git check 分支代码
1.git clone xxx.git; 2.git branch -r //查看分支 3.git checkout origin/分支名字 -b 本地新建分支名字 //从远程分支名字 down代码 ...