40.oracle事务
一、事务特性
事务必须具备以下四个特性,简称ACID属性
- 原子性(Atomicity):事务是一个完整的操作。事务的各步操作是不可分割的(原子的);要么都执行,要么都不执行
场景:银行转账 A-100 B+100,同时成功或失败。 - 一致性(Consistency):一个查询的结果必须与数据库在查询开始的状态一致(读不等待写,写不等待读。)
场景:下午1点查询数据,1点半查出结果,这期间有人更新了数据,那么1点半查出来的数据不会是更新后的数据,会把undo里的相关数据返回 - 隔离性(isolation):对于其他对话来说,未提交的事务必须不可见。
场景:A和B在各自的session中做任何操作,只要没有提交,相互之间没有任何影响。 - 持久性(Durability):事务一单提交完成,数据库不会丢失这个事务的结果,数据库通过日志能够保持事务的持久性。
场景:事务提交后不可逆,提交数据是有内存的数据刷新到磁盘上,这个过程快慢和性能有关。那么oracle主要是靠rudo日志,先记录到日志,再写到磁盘上。
二、事务的开始和结束
事务采用隐性的方式,起始于session的第一条DML语句,
查看事务:select * from v$transaction;
事务结束于提交或者回滚:
- commit或者rollback
- ddl语句被执行
- dcl语句被执行
- 用户退出sqlplus(提交【正常退出】或者回滚)
- 机器故障(回滚)
- shutdown immediate(回滚)
三、锁
锁分为共享锁和排他锁
排他锁(独占),排斥其他的排他锁和共享锁。
共享锁:排斥其他排他锁,但不排斥其他共享锁。
锁类型:
DML锁(data locks,数据 锁),用于保护数据的完整性,TX(行级锁),TM(表级锁),日常使用的DML操作就会产生事务和锁。
查看事务:select * from v$transaction;
查看锁:select * from v$lock
DDL锁(dictionary locks,数据字典锁):用户保护数据库对象的结构,如表、索引等结构定义。
SYSTEM锁(internal locks and latches):保护数据库的内部结构
用途:只有事务才会产生锁,保证数据完整性和正确性。
四、加锁的模式
自动加锁,做DML操作时,如insert,update,delete,以及select .... for update 由oracle自动加锁。
select * from emp where deptno=10 for update;
部门为10 的记录会被锁定,我们可以进行试探要修改的数据是否被加锁:
- select * from emp where empno=7782 for update nowait;
- select * from emp where empno=7782 for update wait 5;
- select * from emp where job='CLERK' for update skip locked;
如果这个锁占用的时间很长,我们可以通过管理员kill掉session用户。
- 首先在v$lock表中查看是哪个id占用了太长时间
- 根据v$lock的¥id,去v$session里找到,进行kill
select sid,serial# from v$session where sid=170
alter system kill session 'sid,serial'
下图使用for update 数据被锁住(注意标注的地方):

另一个客户端再执行update,就会之一在等待状态,直到前一个客户端的update提交才停止等待:

要是不想等待就用 nowait,如果数据被锁定会给报错:

解锁:
select * from v$lock;


不难发现sid为9的session的type为TM和TX,所以把sid为9的session在v$session中对应的记录kill
select sid,serial# from v$session where sid=9

alter system kill session '9,627';
这时候sid为9的session想提交的话会报错:

死锁问题:
oracle会自动解决死锁,如
A用户:update a set id = 1000 where id=100;
B用户:update a set id = 2000 where id=200;
这两条记录都还没有提交,接着A用户又想修改id=200的记录,同时B用户想修改id=100的记录:
A用户:update a set id = 20 where id=200;
B用户:update a set id= 10 where id=100;
这样会造成死锁,这时oracle会自动检测到死锁并解决死锁。要注意执行的顺序才能看到效果。
40.oracle事务的更多相关文章
- Oracle事务
Oracle事务的ACID特性 原子性Atomicity:事务中的所有动作要么都发生,要么都不发生. 一致性Consistency:事务将数据库从一种状态转变为下一种一致状态. 隔离性Isolatio ...
- 浅谈Oracle事务【转载竹沥半夏】
浅谈Oracle事务[转载竹沥半夏] 所谓事务,他是一个操作序列,这些操作要么都执行,要么都不执行,是一个不可分割的工作单元.通俗解释就是事务是把很多事情当成一件事情来完成,也就是大家都在一条船上,要 ...
- Oracle事务之一:锁和隔离
Oracle事务之一:锁和隔离 一. 事务概述 事务管理是数据库处理的核心.数据库既要保证用户能并发地执行事务,还要保证数据库的一致性. 当第一条可执行的SQL开始执行,就隐形地开始了一个事务,直到遇 ...
- oracle事务和锁
数据库事务概括 1. 说明 一组SQL,一个逻辑工作单位,执行时整体修改或者整体回退. 2.事务相关概念 1)事务的提交和回滚:COMMIT/ROLLBACK 2)事务的开始和结束 开始事务:连接到数 ...
- oracle事务和锁(转)
If you use a SET TRANSACTION statement, then it must be the first statement in your transaction. How ...
- oracle事务(转)
今天温习oracle事务,记录如下: 事务定义 事务是保持数据的一致性,它由相关的DDL或者DML语句做为载体,这组语句执行的结果要么一起成功,要么一起失败. 我们 ...
- oracle 事务 与 提交
Oracle事务 一般事务(DML)即数据修改(增.删.改)的事务事务会将所有在事务中被修改的数据行加上锁(行级锁),来阻止其它人(会话)同时对这些数据的修改操作.当事务被提交或回滚后,这些数据才会被 ...
- Oracle事务隔离级别处理差异
Oracle事务隔离是事务读操作不同程度的数据隔离,分为READ_UNCOMMITTED.READ_COMMITTED(默认).SERIALIZABLE. Oracle事务隔离级别SERIALIZAB ...
- Oracle事务与锁
Oracle事务与锁 2017-12-13 目录 1 数据库事务概括 1.1 事务定义 1.2 事务生命周期 1.3 事物的特性 1.4 死锁2 事务相关语句 2.1 事务相关语句概括 2 ...
随机推荐
- Linux下Thunderbird要安装的插件
网络时代,总少不了跟邮件打交道,日常生活使用时多数是直接用网页版邮箱,在职场中一般要求用邮件客户端.使用Windows的朋友一般要么用Outlook,要么用Foxmail,其实,我们还有一个很不错的选 ...
- Golang学习系列:(一)介绍和安装
Golang学习系列:(一)介绍和安装 Java程序员带你来到Go的世界,让我们开始探索吧! Go是一种新的语言,一种并发的,带有垃圾回收的.快速编译的语言,它具有一下特点: 他可以在一台计算机上用几 ...
- vbs执行系统命令
首先说明一下,我的所有代码都是vbscript,jscript我没有研究过,不过我想也差不多. 关于最基础的语法比如变量的申明,分支,循环,函数的调用,等等这些我就不讲了,不懂得自己看一下. 1.我们 ...
- __slots__(面向对象进阶)
1.__slots__是什么:是一个类变量,变量值可以是列表,元祖,或者可迭代对象,也可以是一个字符串(意味着所有实例只有一个数据属性) 2.引子:使用点来访问属性本质就是在访问类或者对象的__dic ...
- Golang之匿名函数和闭包
Go语言支持匿名函数,即函数可以像普通变量一样被传递或使用. 使用方法如下: main.go package main import ( "fmt" ) func main() { ...
- Zookeeper 源码(五)Leader 选举
Zookeeper 源码(五)Leader 选举 前面学习了 Zookeeper 服务端的相关细节,其中对于集群启动而言,很重要的一部分就是 Leader 选举,接着就开始深入学习 Leader 选举 ...
- 获取iOS设备唯一标识
[获取iOS设备唯一标识] 1.已禁用-[UIDevice uniqueIdentifier] 苹果总是把用户的隐私看的很重要.-[UIDevice uniqueIdentifier]在iOS5实际在 ...
- Android Studio真机测试
本页内容 1.真机测试好处多 2.开始吧!真机测试 1.真机测试好处多 不久前才开我的Android Studio之旅,就遇上了一个大麻烦——创建的模拟器各种运行出错.尝试了各种解决方法,都没有什么结 ...
- windows下Apache的虚拟主机配置
1.Apache虚拟主机: 在Apache上有关于虚拟主机的具体说明,具体可以参考Apache手册,这里简单的说一下虚拟主机主要分为两种: 1.基于主机名的虚拟主机(一个IP地址,多个网站) 2.基于 ...
- 读<走出软件作坊>有感
1.成功的人都是在不可能完成任务的情况下完成的,成功的人也从来不会抱怨客观条件多么糟糕. 2.公司给你的资源,永远小于你做事需要的资源,这就是现实,就这么多人,就这样的素质,必须在现状中想出做事的办法 ...