




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Oracle 数据数据库管理库管理与应用与应用 本章要点事务的概念与特性事务的概念与特性 1常见事务管理命令常见事务管理命令 2并发控制与锁并发控制与锁 3 312.1 事务概述事务概述 v1事务的概念事务的概念 在日常生活和工作中,人们为了完成一定的任务都会执行一系列逻辑上相关的操作。这些操作共同影响着任务的实现结果,在Oracle中把这些操作的集操作的集合看作一个事务(合看作一个事务(TRANSACTION) 。 Oracle中,用户不能显示的开始不能显示的开始一个事务,一般在上一个事务结束(被提交或被回滚)后,新事务会隐式的在修改数据的第一条语句处开始。 vOracle中的事务结束会发生
2、在: 用户使用用户使用COMMIT命令显示提交事务。命令显示提交事务。 用户使用用户使用ROLLBACK命令回滚整个事务。命令回滚整个事务。 用户执行了一条用户执行了一条DDL语句。语句。 用户正常断开了与用户正常断开了与Oracle的连接,这时用户当的连接,这时用户当前的事务将被自动提交。前的事务将被自动提交。 用户进程意外被终止,这时用户当前的事务被用户进程意外被终止,这时用户当前的事务被回滚。回滚。 用户关闭用户关闭SQL*PLUS会话时,默认使用会话时,默认使用ROLLBACK回滚事务。回滚事务。12.2 事务的特性事务的特性 v数据库中的事务具有ACID属性: 原子性原子性(Atom
3、icity) 一致性一致性(Consistency) 隔离性隔离性(Isolation) 持久性持久性(Durability)12.2.1 原子性原子性 v事务的原子性是指构成事务的所有语句要事务的原子性是指构成事务的所有语句要么都成功执行,要么都失败,不会有部分么都成功执行,要么都失败,不会有部分成功部分失败的情况发生。成功部分失败的情况发生。 事务是一个最基本的执行单元。 事务的原子性可以分为以下级别:事务的原子性可以分为以下级别:v1语句级原子性语句级原子性 指每条语句本身也是最小级别的事务,该语句要么完全执行成功,要么完全失败,并且它不会影响其他语句的执行。 实际上,Oracle在每条
4、被执行的语句前都隐式设置了保存点(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 t1 VALUES(1); INSERT INTO t
5、1 VALUES(-1); INSERT INTO t1 VALUES(2);COMMIT; -提交事务提交事务 SELECT * FROM t1; ID- 1 2v另外,语句级原子性还表现在该语句的任语句级原子性还表现在该语句的任何副作用何副作用(如被它触发的触发器)也被认也被认为是该语句的一部分。为是该语句的一部分。 也就是说如果该语句成功,受它影响的其他操作也将成功;如果该语句失败并回滚,受它影响的其他操作也将被自动回滚。 如下例所示。 v例12.2 在例12.1的基础上为表t1创建插入操作的事前行级触发器,并创建表t2用于统计t1表中的行数。步骤步骤1 1:创建表:创建表t2t2,并插
6、入初始值,并插入初始值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 ROWBEGIN UPDATE t2 SET r=r+1; dbms_output.put_line(插入触发器被触发插入触发器被触发);END; 步骤步骤3 3:向:向t1 t1表中插入不满足约束条件的值表中插入不满足约束条件的值“-1 -1”INSERT INTO
7、 t1 VALUES(-1); 执行结果如图12-1所示 : -查询表查询表t2中的记录的个数中的记录的个数SELECT * FROM t2; R- 2修改修改t2表表的的update操作已经操作已经被执行被执行修改修改t2表表的的update操作已经操作已经被回滚被回滚v2过程级原子性过程级原子性 过程级原子性是指Oracle把PL/SQL匿名过程块也当作是语句,当作一个整体,过程中的所有代码要么都执行成功,要么都执行失败,并且不影响过程外的其他语句。 v例12.3 利用INSERT语句和一个匿名过程块分别向例12.1创建的表t1中插入新数据。-利用INSERT命令向表t1中插入数据3INS
8、ERT INTO t1 VALUES(3);-利用匿名块向表t1中插入数据4和-1BEGININSERT 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);INSERT INTO t1 VALUES(5);COMMIT;SELECT * FROM t1; ID- 1 2 3 4v 5事务中的事务中的所有语句所有语句均执行成
10、均执行成功功一个事务一个事务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 一致性一致性v事务的一致性是指数据库在事务操作前满事务的一致性是指数据库在事务操作前满足一定的业务处理规则,事务操作后也要足一定的业务处理规则,事务操作后也要满足这样的业务处理规则。满足这样的业务处理规则。 v
11、参见例12.6 。12.2.3 隔离性隔离性 v事务的隔离性是指:当多个用户、多个会事务的隔离性是指:当多个用户、多个会话同时访问话同时访问Oracle数据库的时候,他们之数据库的时候,他们之间是未知的、不可见的、互不影响的。间是未知的、不可见的、互不影响的。 由于事务具有隔离性才能保证由于事务具有隔离性才能保证Oracle实现多用实现多用户多会话的并发处理。户多会话的并发处理。 v例12.7 打开两个SQL*Plus窗口模拟多用户的并发操作。使用例12.6中创建的table1表分别在两个窗口中执行插入操作和查询操作,在插入操作提交前,两个窗口中看到的数据不相同。在窗口1中执行插入命令和查询命
12、令,代码和执行结果如下:INSERT INTO table1 VALUES(4);SELECT * FROM table1; ID- 2 3 4在窗口在窗口2中执行查询命令,执行结果中执行查询命令,执行结果如下:如下:SELECT * FROM table1; ID- 2 3数据不同,数据不同,事务隔离,事务隔离,互不影响互不影响v事务的隔离性不允许多个会话同时修改相同的数事务的隔离性不允许多个会话同时修改相同的数据,除非较早的修改命令提交结束后,其他窗口据,除非较早的修改命令提交结束后,其他窗口才允许修改。才允许修改。 12.2.4 持久性持久性 v事务的持久性是指:事务一旦提交,它的改变事
13、务的持久性是指:事务一旦提交,它的改变就会永久生效,不能再被撤销(回滚),即使就会永久生效,不能再被撤销(回滚),即使出现系统故障或错误,改变也不会消失。出现系统故障或错误,改变也不会消失。 12.3 事务管理命令事务管理命令 v对事务执行各种操作的常见命令如下: COMMIT事务提交命令 ROLLBACK事务回滚命令 SAVEPOINT 设置保存点命令 ROLLBACK TO 回滚到保存点命令 SET TRANSACTION设置事务属性命令 SET CONSTRAINT设置约束的可延迟性命令12.3.1 COMMIT命令命令 vCOMMIT是事务提交命令,表明该事务对数据库所做的修改操作将永
14、久记录到数据库中,不能被回滚。 v用户执行修改数据库的操作但未提交时,Oracle已经完成了对数据库的实际操作,主要包括: Oracle生成了回滚信息。生成了回滚信息。 Oracle在在 SGA 中生成了重做日志条目。中生成了重做日志条目。 修改后的新数据已经被写入修改后的新数据已经被写入 SGA 中的数据缓冲区中的数据缓冲区。 v事务被提交时,Oracle进行以下操作: 为此事务分配一个唯一的系统变化编号(SYSTEM CHANGE NUMBER,简称SCN,又称 Oracle的内部时钟)。 重做日志写进程(LGWR)将SGA 内重做日志缓冲区中的重做日志条目写入重做日志文件中。同时还将此事
15、务的 SCN 也写入重做日志文件。 释放事务操作中占用的数据,即解除添加到表或数据行上的各种锁。 通知用户事务已经成功提交。 从以上得知,提交事务的时间和事务的从以上得知,提交事务的时间和事务的大小,没有关系大小,没有关系。vOracle中事务的提交方式:中事务的提交方式: 显示执行COMMIT命令提交 事务隐式提交 执行DDL语句时它前后的事务被隐式提交(DDL语句自己是一个独立的事务) 正常结束会话时事务隐式提交 设置set autocommit on事务可自动提交v参见例12.9 12.3.2 ROLLBACK命令命令 vROLLBACK是事务回滚命令,表明撤销未提交的事务所做的各种修改
16、操作。 回滚事务的时间和事务中修改的数据量成正比 。v当事务被回滚时,Oracle将执行以下操作: 使用回滚表空间内存储的相关信息撤销事务中所有 SQL 语句对数据的修改。 释放事务中占用的各种资源,即解除该事务对表或行施加的各种锁。 通知用户事务回滚操作已经完成。 v例12.10 向scott方案下的emp表中插入职工编号为1113的记录并用UPDATE命令将该记录的职工姓名修改为张三,然后用ROLLBACK命令回滚整个事务,代码如下:INSERT INTO scott.emp(empno) VALUES(1113); -插入职工编号为1113的记录SELECT * FROM scott.e
17、mp WHERE empno=1113; -执行查询命令查看该员工的姓名为nullUPDATE scott.emp SET ename=张三 WHERE empno=1113; -修改姓名为张三SELECT * FROM scott.emp WHERE empno=1113; -该员工姓名从null改为张三ROLLBACK; -执行回滚操作,撤销整个事务SELECT * FROM scott.emp WHERE empno=1113; -找不到该记录12.3.3 SAVEPOINT 和 ROLLBACK TO SAVEPOINT 命令 vSAVEPOINT命令可以在事务中的某个地方设置保存点,
18、将一个大的事务划分为几个片段。 当某个保存点后面的命令出现错误需要回滚时,只需回滚到该保存点,不影响保存点前面操作的执行,也不影响该回滚命令之后的操作。 v当事务被回滚到某个保存点时,Oracle将执行以下操作: 回滚指定保存点之后的所有语句。回滚指定保存点之后的所有语句。 保留指定的保存点,但其后创建的保存点都将被保留指定的保存点,但其后创建的保存点都将被清除。清除。 释放此保存点后面获得的表级锁与行级锁,但它释放此保存点后面获得的表级锁与行级锁,但它之前的数据锁依然保留。之前的数据锁依然保留。 v因此,回滚到保存点时,并不结束整个事务。v定义保存点的格式:定义保存点的格式:SAVEPOIN
19、T 保存点名称;v回滚到指定保存点的格式:回滚到指定保存点的格式:ROLLBACK TO 保存点名称; 参见例12.11 12.3.4 SET TRANSACTION命令命令 v用户可以使用SET TRANSACTION命令设置当前事务的属性。 如设置事务的隔离级别、设置事务回滚时用的存储空间以及为事务命名等操作。 v使用该命令时需要注意的事项使用该命令时需要注意的事项: 该语句必须是当前事务中的第一条语句 。 命令设置的事务属性只对当前事务生效,当该事务结束后,设置的属性也将失效。 v事务的隔离级别是指事务与事务之间的隔离程度,能够有效解决并发事务之间的干扰,主要包括: v1READ ONL
20、Y(只读)(只读) 当前事务只能对数据库执行当前事务只能对数据库执行SELECT操作不能执操作不能执行行INSERT、UPDATE、DELETE操作。操作。 数据库被冻结为事务刚开始的状态,其他事务后数据库被冻结为事务刚开始的状态,其他事务后来对数据库的修改操作在当前事务中不可见。来对数据库的修改操作在当前事务中不可见。 v2READ WRITE(读写)(读写) 当前事务可以对数据库执行增、删、改、查的全当前事务可以对数据库执行增、删、改、查的全部操作。部操作。 并不冻结数据库状态。当前事务能够看到其他事并不冻结数据库状态。当前事务能够看到其他事务提交后的数据库修改操作。务提交后的数据库修改操
21、作。 这是事务的默认隔离级别,一般不用单独设置。这是事务的默认隔离级别,一般不用单独设置。v3ISOLATION LEVEL SERIALIZABLE(串行读)(串行读) 当前事务可以对数据库执行增、删、改、查的当前事务可以对数据库执行增、删、改、查的全部操作。全部操作。 并且冻结数据库的状态。该事务能够看到自己并且冻结数据库的状态。该事务能够看到自己对数据库的修改操作,但是看不到其他事务对对数据库的修改操作,但是看不到其他事务对数据库的修改操作数据库的修改操作 。v4ISOLATION LEVEL READ COMMITTED(提交读)(提交读) 该隔离级别的作用和该隔离级别的作用和READ WRITE一致,当前一致,当前事务可以读取其他事务提交后的数据,看不到事务可以读取其他事务提交后的数据,看不到未提交的数据。这也是默认级别,不需单独设未提交的数据。这也是默认级别,不需单独设置。置。12.3.5 SET CONSTRAINT 命令命令 vSET CONSTRAINT 命令用来设置数据库中的约束在事务中是立即生效还是延迟到事务提交时再生效。v另外,另外,Ora
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 网络游戏虚拟货币发行与游戏角色扮演服务合同
- 东南亚仓储库存盘点与仓储设备租赁合同
- 儿童综合保障计划退保服务协议
- 游戏美术资源制作设计师劳务合同
- 互联网金融服务反欺诈补充合同
- 数字出版物区域独家代理权转让合同
- 工业自动化软件许可及市场推广合作协议
- 太阳能电池技术升级补充协议
- 跨国公司员工离职保密协议及全球竞业限制条款
- 保险业务审核补充合同
- 生物+昆一中2025届高三联考试卷及答案(九)
- 学校教辅征订管理“三公开、两承诺、一监督”制度
- 课题申报书:现代产业学院内部治理结构研究
- 2025年人教版小学五年级下册奥林匹克数学竞赛试卷(附参考答案)
- 《油气井套管工程检测技术》课件
- 2025届高考语文复习:2024年新课标二卷第九题说题 课件
- 污水管道疏通试题及答案
- 2025年移动式压力容器R2操作证考试笔试试题(200题)附答案
- 造价咨询管理制度体系
- 2024年农艺师新政策解读试题及答案
- 2025年版中等职业教育专业教学标准 750107 绘画
评论
0/150
提交评论