版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Oracl e 数据数据 库管理库管理 与应用与应用 本章要点 事务的概念与特性事务的概念与特性 1 常见事务管理命令常见事务管理命令 2 并发控制与锁并发控制与锁 3 3 12.1 事务概述事务概述 v1事务的概念事务的概念 在日常生活和工作中,人们为了完成一定的任务都 会执行一系列逻辑上相关的操作。这些操作共同影 响着任务的实现结果,在Oracle中把这些操作的集操作的集 合看作一个事务(合看作一个事务(TRANSACTION) 。 Oracle中,用户不能显示的开始不能显示的开始一个事务,一般在 上一个事务结束(被提交或被回滚)后,新事务会 隐式的在修改数据的第一条语句处开始。 vOra
2、cle中的事务结束会发生在: 用户使用用户使用COMMIT命令显示提交事务。命令显示提交事务。 用户使用用户使用ROLLBACK命令回滚整个事务。命令回滚整个事务。 用户执行了一条用户执行了一条DDL语句。语句。 用户正常断开了与用户正常断开了与Oracle的连接,这时用户当的连接,这时用户当 前的事务将被自动提交。前的事务将被自动提交。 用户进程意外被终止,这时用户当前的事务被用户进程意外被终止,这时用户当前的事务被 回滚。回滚。 用户关闭用户关闭SQL*PLUS会话时,默认使用会话时,默认使用 ROLLBACK回滚事务。回滚事务。 12.2 事务的特性事务的特性 v数据库中的事务具有ACI
3、D属性: 原子性原子性(Atomicity) 一致性一致性(Consistency) 隔离性隔离性(Isolation) 持久性持久性(Durability) 12.2.1 原子性原子性 v事务的原子性是指构成事务的所有语句要事务的原子性是指构成事务的所有语句要 么都成功执行,要么都失败,不会有部分么都成功执行,要么都失败,不会有部分 成功部分失败的情况发生。成功部分失败的情况发生。 事务是一个最基本的执行单元。 事务的原子性可以分为以下级别:事务的原子性可以分为以下级别: v1语句级原子性语句级原子性 指每条语句本身也是最小级别的事务,该语句要么 完全执行成功,要么完全失败,并且它不会影响其
4、 他语句的执行。 实际上,Oracle在每条被执行的语句前都隐式设置 了保存点(SAVEPOINT)。 如语句INSERT INTO table1 VALUES(1); 可以理 解为: SAVEPOINT statement1; INSERT INTO table1 VALUES(1); IF ERROR THEN ROLLBACK TO statement1; v例12.1 建立表t1,并且设置检查约束,然后向表 中添加3条记录,其中2条满足约束条件1条不满 足约束条件,提交后查询表中的记录。 CREATE TABLE t1(id NUMBER CHECK(id0); INSERT INTO
5、 t1 VALUES(1); INSERT INTO t1 VALUES(-1); INSERT INTO t1 VALUES(2); COMMIT; -提交事务提交事务 SELECT * FROM t1; ID - 1 2 v另外,语句级原子性还表现在该语句的任语句级原子性还表现在该语句的任 何副作用何副作用(如被它触发的触发器)也被认也被认 为是该语句的一部分。为是该语句的一部分。 也就是说如果该语句成功,受它影响的其他操 作也将成功;如果该语句失败并回滚,受它影 响的其他操作也将被自动回滚。 如下例所示。 v例12.2 在例12.1的基础上为表t1创建插入 操作的事前行级触发器,并创建表
6、t2用于统 计t1表中的行数。 步骤步骤1 1:创建表:创建表t2t2,并插入初始值,并插入初始值2 2。 CREATE TABLE t2(r NUMBER); INSERT INTO t2 VALUES(2); 步骤步骤2 2:为表:为表t1 t1创建插入触发器创建插入触发器 CREATE OR REPLACE TRIGGER insert_t1 BEFORE INSERT ON t1 FOR EACH ROW BEGIN UPDATE t2 SET r=r+1; dbms_output.put_line(插入触发器被触发插入触发器被触发); END; 步骤步骤3 3:向:向t1 t1表中插
7、入不满足约束条件的值表中插入不满足约束条件的值“-1 -1” INSERT INTO t1 VALUES(-1); 执行结果如图12-1所示 : -查询表查询表t2中的记录的个数中的记录的个数 SELECT * FROM t2; R - 2 修改修改t2表表 的的update 操作已经操作已经 被执行被执行 修改修改t2表表 的的update 操作已经操作已经 被回滚被回滚 v2过程级原子性过程级原子性 过程级原子性是指Oracle把PL/SQL匿名过程块 也当作是语句,当作一个整体,过程中的所有 代码要么都执行成功,要么都执行失败,并且 不影响过程外的其他语句。 v例12.3 利用INSER
8、T语句和一个匿名过程块分别向例 12.1创建的表t1中插入新数据。 -利用INSERT命令向表t1中插入数据3 INSERT INTO t1 VALUES(3); -利用匿名块向表t1中插入数据4和-1 BEGIN INSERT INTO t1 VALUES(4); INSERT INTO t1 VALUES(-1); END; -提交 COMMIT; -查询t1表中的数据 SELECT * FROM t1; ID - 1 2 3 过程中被插入过程中被插入 的新数据均被的新数据均被 回滚回滚 v3事务级原子性事务级原子性 事务级原子性是指事务级原子性是指Oracle把整个事务中的所有把整个事务
9、中的所有 语句和匿名块都当作一个整体,一个事务。语句和匿名块都当作一个整体,一个事务。 用户在提交或回滚事务时,要么所有语句都执用户在提交或回滚事务时,要么所有语句都执 行,要么都失败。行,要么都失败。 事务级原子性中包含了语句级原子性和过程级事务级原子性中包含了语句级原子性和过程级 原子性,整个事务中的语句或匿名块首先受语原子性,整个事务中的语句或匿名块首先受语 句级原子性和过程级原子性的影响。句级原子性和过程级原子性的影响。 v例12.4 利用例12.1创建的表t1,向表中添加两行新数 据4和5,然后提交事务,最后查询表中的记录。 INSERT INTO t1 VALUES(4); INS
10、ERT INTO t1 VALUES(5); COMMIT; SELECT * FROM t1; ID - 1 2 3 4 v 5 事务中的事务中的 所有语句所有语句 均执行成均执行成 功功 一个事务一个事务 v例12.5 利用例12.1创建的表t1,向表中添加两行新数 据6和7,然后回滚事务,最后查询表中的记录。 INSERT INTO t1 VALUES(6); INSERT INTO t1 VALUES(7); ROLLBACK; SELECT * FROM t1; ID - 1 2 3 4 5 一个事务一个事务 事务中的事务中的 所有语句所有语句 均被回滚均被回滚 12.2.2 一致性
11、一致性 v事务的一致性是指数据库在事务操作前满事务的一致性是指数据库在事务操作前满 足一定的业务处理规则,事务操作后也要足一定的业务处理规则,事务操作后也要 满足这样的业务处理规则。满足这样的业务处理规则。 v参见例12.6 。 12.2.3 隔离性隔离性 v事务的隔离性是指:当多个用户、多个会事务的隔离性是指:当多个用户、多个会 话同时访问话同时访问Oracle数据库的时候,他们之数据库的时候,他们之 间是未知的、不可见的、互不影响的。间是未知的、不可见的、互不影响的。 由于事务具有隔离性才能保证由于事务具有隔离性才能保证Oracle实现多用实现多用 户多会话的并发处理。户多会话的并发处理。
12、 v例12.7 打开两个SQL*Plus窗口模拟多用户的并发操作 。使用例12.6中创建的table1表分别在两个窗口中执行 插入操作和查询操作,在插入操作提交前,两个窗口中 看到的数据不相同。 在窗口1中执行插入命令和查询命令,代码和执行结果如下: INSERT INTO table1 VALUES(4); SELECT * FROM table1; ID - 2 3 4 在窗口在窗口2中执行查询命令,执行结果中执行查询命令,执行结果 如下:如下: SELECT * FROM table1; ID - 2 3 数据不同,数据不同, 事务隔离,事务隔离, 互不影响互不影响 v事务的隔离性不允许
13、多个会话同时修改相同的数事务的隔离性不允许多个会话同时修改相同的数 据,除非较早的修改命令提交结束后,其他窗口据,除非较早的修改命令提交结束后,其他窗口 才允许修改。才允许修改。 12.2.4 持久性持久性 v事务的持久性是指:事务一旦提交,它的改事务的持久性是指:事务一旦提交,它的改 变就会永久生效,不能再被撤销(回滚),变就会永久生效,不能再被撤销(回滚), 即使出现系统故障或错误,改变也不会消失即使出现系统故障或错误,改变也不会消失 。 12.3 事务管理命令事务管理命令 v对事务执行各种操作的常见命令如下: COMMIT事务提交命令 ROLLBACK事务回滚命令 SAVEPOINT 设
14、置保存点命令 ROLLBACK TO 回滚到保存点命令 SET TRANSACTION设置事务属性命令 SET CONSTRAINT设置约束的可延迟性命令 12.3.1 COMMIT命令命令 vCOMMIT是事务提交命令,表明该事务对数据库 所做的修改操作将永久记录到数据库中,不能被 回滚。 v用户执行修改数据库的操作但未提交时,Oracle 已经完成了对数据库的实际操作,主要包括: Oracle生成了回滚信息。生成了回滚信息。 Oracle在在 SGA 中生成了重做日志条目。中生成了重做日志条目。 修改后的新数据已经被写入修改后的新数据已经被写入 SGA 中的数据缓冲区中的数据缓冲区。 v事
15、务被提交时,Oracle进行以下操作: 为此事务分配一个唯一的系统变化编号(SYSTEM CHANGE NUMBER,简称SCN,又称 Oracle的内 部时钟)。 重做日志写进程(LGWR)将SGA 内重做日志缓冲 区中的重做日志条目写入重做日志文件中。同时还将 此事务的 SCN 也写入重做日志文件。 释放事务操作中占用的数据,即解除添加到表或数据 行上的各种锁。 通知用户事务已经成功提交。 从以上得知,提交事务的时间和事务的从以上得知,提交事务的时间和事务的 大小,没有关系大小,没有关系。 vOracle中事务的提交方式:中事务的提交方式: 显示执行COMMIT命令提交 事务隐式提交 执行
16、DDL语句时它前后的事务被隐式提交(DDL语 句自己是一个独立的事务) 正常结束会话时事务隐式提交 设置set autocommit on事务可自动提交 v参见例12.9 12.3.2 ROLLBACK命令命令 vROLLBACK是事务回滚命令,表明撤销未提 交的事务所做的各种修改操作。 回滚事务的时间和事务中修改的数据量成正比 。 v当事务被回滚时,Oracle将执行以下操作: 使用回滚表空间内存储的相关信息撤销事务中所 有 SQL 语句对数据的修改。 释放事务中占用的各种资源,即解除该事务对表 或行施加的各种锁。 通知用户事务回滚操作已经完成。 v例12.10 向scott方案下的emp表
17、中插入职工编号为 1113的记录并用UPDATE命令将该记录的职工姓名修 改为张三,然后用ROLLBACK命令回滚整个事务,代 码如下: INSERT INTO scott.emp(empno) VALUES(1113); -插入职工编号为1113的记录 SELECT * FROM scott.emp WHERE empno=1113; -执行查询命令查看该员工的姓名为null UPDATE scott.emp SET ename=张三 WHERE empno=1113; -修改姓名为张三 SELECT * FROM scott.emp WHERE empno=1113; -该员工姓名从nul
18、l改为张三 ROLLBACK; -执行回滚操作,撤销整个事务 SELECT * FROM scott.emp WHERE empno=1113; -找不到该记录 12.3.3 SAVEPOINT 和 ROLLBACK TO SAVEPOINT 命令 vSAVEPOINT命令可以在事务中的某个地方 设置保存点,将一个大的事务划分为几个 片段。 当某个保存点后面的命令出现错误需要回滚时 ,只需回滚到该保存点,不影响保存点前面操 作的执行,也不影响该回滚命令之后的操作。 v当事务被回滚到某个保存点时,Oracle将执行 以下操作: 回滚指定保存点之后的所有语句。回滚指定保存点之后的所有语句。 保留指
19、定的保存点,但其后创建的保存点都将被保留指定的保存点,但其后创建的保存点都将被 清除。清除。 释放此保存点后面获得的表级锁与行级锁,但它释放此保存点后面获得的表级锁与行级锁,但它 之前的数据锁依然保留。之前的数据锁依然保留。 v因此,回滚到保存点时,并不结束整个事务。 v定义保存点的格式:定义保存点的格式: SAVEPOINT 保存点名称; v回滚到指定保存点的格式:回滚到指定保存点的格式: ROLLBACK TO 保存点名称; 参见例12.11 12.3.4 SET TRANSACTION命令命令 v用户可以使用SET TRANSACTION命令设 置当前事务的属性。 如设置事务的隔离级别、
20、设置事务回滚时用的 存储空间以及为事务命名等操作。 v使用该命令时需要注意的事项使用该命令时需要注意的事项: 该语句必须是当前事务中的第一条语句 。 命令设置的事务属性只对当前事务生效,当该 事务结束后,设置的属性也将失效。 v事务的隔离级别是指事务与事务之间的隔 离程度,能够有效解决并发事务之间的干 扰,主要包括: v1READ ONLY(只读)(只读) 当前事务只能对数据库执行当前事务只能对数据库执行SELECT操作不能执操作不能执 行行INSERT、UPDATE、DELETE操作。操作。 数据库被冻结为事务刚开始的状态,其他事务后数据库被冻结为事务刚开始的状态,其他事务后 来对数据库的修
21、改操作在当前事务中不可见。来对数据库的修改操作在当前事务中不可见。 v2READ WRITE(读写)(读写) 当前事务可以对数据库执行增、删、改、查的全当前事务可以对数据库执行增、删、改、查的全 部操作。部操作。 并不冻结数据库状态。当前事务能够看到其他事并不冻结数据库状态。当前事务能够看到其他事 务提交后的数据库修改操作。务提交后的数据库修改操作。 这是事务的默认隔离级别,一般不用单独设置。这是事务的默认隔离级别,一般不用单独设置。 v3ISOLATION LEVEL SERIALIZABLE (串行读)(串行读) 当前事务可以对数据库执行增、删、改、查的当前事务可以对数据库执行增、删、改、
22、查的 全部操作。全部操作。 并且冻结数据库的状态。该事务能够看到自己并且冻结数据库的状态。该事务能够看到自己 对数据库的修改操作,但是看不到其他事务对对数据库的修改操作,但是看不到其他事务对 数据库的修改操作数据库的修改操作 。 v4ISOLATION LEVEL READ COMMITTED(提交读)(提交读) 该隔离级别的作用和该隔离级别的作用和READ WRITE一致,当前一致,当前 事务可以读取其他事务提交后的数据,看不到事务可以读取其他事务提交后的数据,看不到 未提交的数据。这也是默认级别,不需单独设未提交的数据。这也是默认级别,不需单独设 置。置。 12.3.5 SET CONSTRAINT 命令命令 vSET CONSTRAINT 命令用来设置数据库 中的约束
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 八年级物理下册 4.4《大气压强》教学设计 北京课改版
- 有机原料贸易格局演变-洞察与解读
- 绿化工程施工组织设计方案
- 第7课 给公园披上“银装”教学设计-2025-2026学年小学信息技术(信息科技)第二册(供四年级使用)浙教版(广西)
- 北京住宅太阳能采暖生活热水系统可行性方案模板
- 养老院护理人员接待老年人需求培训方案
- 中国(内蒙古)自由贸易试验区总体方案学习心得
- 污水处理厂员工绩效考核方案
- 2026年医院消毒隔离知识培训试卷及答案
- 云浮市2026成人高考专升本英语预测试题(含答案)
- 2026年《三级劳动关系协调员》考试练习题库与答案
- 河北石家庄二中2025-2026学年下学期高一数学4月第一次月考试卷(含答案)
- 2026年分析化学考研复试高频面试题包含详细解答
- 综合材料绘画综合材料绘画概述11第一节综合材料绘画的概念
- 《危险化学品安全法》与《危化品安全管理条例》条款对照表
- 吉林省四平市2026年中考物理押题卷(含答案解析)
- 2026年融资租赁公司招聘考试笔试试题(含答案)
- 中国平安IQ测评题库
- 2025可信数据空间基础知识
- 赣州市属国企招聘笔试题库2026
- 2025至2030超声刀行业运营态势与投资前景调查研究报告
评论
0/150
提交评论