总结于ocl编程艺术:
经常发生的错误错误:更新丢失,旧数据更新了最新的数据。
解决问题的方法:
在Oracle中看好悲观锁(取决于oracle锁开销小,高并发),但在其他的数据库已Deprecated
悲观锁:在用户有意执行更新等DML操作之前,就在行上加锁 for update nowait
悲观锁的结果:
给数据加锁,其他用户可以访问,但是不可以修改记录
当其他用户正在更新,则会得到ora-00054:resource busy
得到0行,说明此列已经被修改,
代码:
scott@ORA10G>
select empno, ename, sal
2
from emp
3
where empno = :empno
4
and ename = :ename
5
and sal = :sal
6
for update nowait
7 /
EMPNO
ENAME SAL
----------
---------- ----------
7934
MILLER 1300
scott@ORA10G>
update emp
2
set ename = :ename, sal = :sal
3
where empno = :empno;
1
row updated.
scott@ORA10G>
commit;
乐观锁:
1只在更新的时候,保存着所有旧的值,用所有旧的值去查找记录来更新
乐观锁的结果:
成功更新数据
更新0条数据,说明更新的数据已经被更新了,需要添加附加的解决冲突的策略
代码:
Update
table
Set
column1 = :new_column1, column2 = :new_column2, ....
Where
primary_key = :primary_key
And
column1 = :old_column1
And
column2 = :old_column2
2为表添加一列,当更新时,列值相同可执行更新,若不同则更新过时,添加解决冲突策略。一般使用trigger来维护这一列的值,在update时,更新这一列值。但是出发器的开销太大,为了实现这样的功能小用牛刀。
3使用校验和的乐观锁定:
(单向散列函数取一个变长输入串(即数据),并把它转换为一个定长的输出串(通常更小),这个输出称为散列值(hash value)。散列值充当输入数据的一个惟一标识符(就像指纹一样)。可以使用散列值来验证数据是否被修改)
实现方法:
OWA_OPT_LOCK.CHECKSUM
DBMS_OBFUSCATION_TOOLKIT.MD5
DBMS_CRYPTO.HASH
这种方面消耗cpu较多,但是网络传输量小。
4ORA_ROWSCN的乐观锁定
Ora
Ora_rowscn默认是块级的,要设置支持行
create
table dept
(deptno, dname, loc, data,
constraint dept_pk primary key(deptno)
)
ROWDEPENDENCIES
as
select deptno, dname, loc, rpad('*',3500,'*')
from scott.dept;
分享到:
相关推荐
详细介绍了Oracle中乐观锁、悲观锁的原理及应用,并有实例
hibernate的乐观锁和悲观锁,两种锁搞定一切
NULL 博文链接:https://ldd600.iteye.com/blog/534032
该文档详述ORACLE悲观锁和乐观锁的使用,锁定策略的选择及ORACLE在处理锁升级所使用的锁定转换策略
什么是锁? 锁定问题 丢失更新 悲观锁定 乐观锁定 乐观锁定还是悲观锁定? 阻塞 死锁 锁升级
从就业与择业的角度来讲,计算机相关专业的大学生从事oracle方面的技术是职业发展中的最佳选择。 其一、就业面广:全球前100强企业99家都在使用ORACLE相关技术,中国政府机构,大中型企事业单位都能有ORACLE技术的...
分布式锁三种实现方式: 1. 基于数据库实现分布式锁; 2. 基于缓存(Redis等)实现...所谓乐观锁与前边最大区别在于基于CAS思想,是不具有互斥性,不会产生锁等待而消耗资源,操作过程中认为不存在并发冲突,只有upd
6.2.4 乐观锁定还是悲观锁定? 197 6.2.5 阻塞 198 6.2.6 死锁 201 6.2.7 锁升级 206 6.3 锁类型 206 6.3.1 DML锁 207 6.3.2 DDL锁 215 6.3.3 闩 218 6.3.4 手动锁定和用户定义锁 226 6.4 小结 227 第7章 ...
1.3.6 DBA与开发人员的关系.........................................................119 1.4 小结....................................................................................121 第 2章体系结构概述...
数据库并发操作,悲观锁和乐观锁
new oracle.jdbc.driver.OracleDriver(); DriverManager.registerDriver(driver); 3.加虚拟机参数jdbc.drivers -Djdbc.drivers=oracle.jdbc.driver.OracleDriver 4.从Jdk6.0以后要求,JDBC 4.0 Drivers ...
悲观锁 乐观锁 行级锁 分布式锁 分区排队 一致性 一致性算法 paxos zab nwr raft gossip 柔性事务(TCC) 一致性原理 CAP BASE 中间件 数据库 mysql 存储引擎 索引 锁 oracle db2 缓存 ...
{1.4.1}整数与浮点数}{23}{subsection.1.4.1} {1.4.1.1}浮点数原理}{24}{subsubsection.1.4.1.1} {1.4.2}格式化输出浮点数}{24}{subsection.1.4.2} {1.4.3}\texttt {char}}{24}{subsection.1.4.3} {1.4.4}转义...