Oracle事务处理与并发控制

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

事物处理与并发控制

授课教师:李斌

目标:

●Oracle中的事务处理是什么

●怎样控制Oracle中的事务处理

●Oracle怎样在数据库中实现并发控制,让多个用户同时访问和修改相同的数据表

1 什么是事务

事务就是在数据库上完成的一个操作。要么全部执行并且存储需要的操作,要么全部撤销已经进行的操作,使得数据库恢复到没有改变之前的状态。

2 事务处理控制语句

Oracle中的一个重要的概念就是没有“开始事务处理”的语句。用户不能显式开始一个事务,事务结束时需要向数据库提交(Commit),或者回滚(Rollback)操作。

●COMMIT

●ROLLBACK

●SA VEPOINT

●ROLLBACK TO SA VEPOINT

●SET TRANSACTION

●SET CONSTRAINTS

2.1 COMMIT处理

当提交时,我们需要处理三个任务:

1、为我们的事务处理生成SCN(系统改变号)。

2、将所有剩余的已经缓冲的重做日志表项写入磁盘,并且将SCN记录到在线重做日志文

件中。由LGWR执行处理。

3、释放我们的会话所锁定的资源。

LGWR会在下列情况之一发生时执行清理工作:

●每隔3秒

●当SGA中的Redo Log Buffer Cache容量超过1/3的空间,或者包含了1MB或者更

多的已经缓冲数据

●进行任何事务处理提交

2.2 ROLLBACK处理

回滚是一项比较耗费资源的操作。当我们不需要存储所作出的修改时,就回滚我们的操作。回滚可以归结为异常处理范畴。

2.3 SA VEPOINT 和ROLLBACK TO SAVEPOINT

SA VEPOINT可以在应用中建立保存点。它可以让用户将单独的大规模事务处理分割成一系列较小的部分。

2.4 SET TRANSACTION

SET TRANSACTION必须是你的事务处理的第一条语句,用来设置事务之间的隔离级别。

●规定事务处理的隔离级别

●规定为用户事务处理所使用的特定回滚段

●命名用户事务处理

SET TRANSACTION READ ONLY

SET TRANSACTION READ WRITE

SET TRANSACTION ISOLA TION LEVEL SERIALIZABLE

SET TRANSACTION ISOLA TION LEVEL READ COMMITED

1、READ ONLY

命令SET TRANSACTION READ ONLY将会做两件事情。

首先而且最明显的是:它会确保你无法执行修改数据的DML操作。如果你要执行这样的操作,就会报错。

另外,READ ONLY可以使得我们把数据库视图冻结在某个时间点。

例如:我们需要获得上午10:00使,数据库中某个数据表中的数据,而这张表又与其它很多数据表之间存在复杂的关联关系。数据库的其它用户有可能继续对其它的一些表随时都在进行DML操作。我们如何获得10:00时我们需要的数据?

一种方法是:停止其它用户的所有活动,锁定相关的数据表。

好的方法是:用户可以使用SET TRANSACTION READ ONLY语句,冻结10:00的用户数据库视图。这样你会看到你需要的数据,而且不会影响其它用户的操作。

实验:冻结视图

打开三个SQL Plus窗口完成实验

2、READ WRITE

默认设置

SET TRANSACTION READ WRITE是默认设置,不会经常使用。

3、ISOLA TION LEVEL SERIALIZABLE

SET TRANSACTION ISOLA TION LEVEL SERIALIZABLE与READ ONLY有一些类似。当使用了这个命令之后,无论是否出现改变,数据库都会为你进行“冻结”。使得用户完全可以在隔离状态下进行自己的操作,完全隔离其它事务处理对你的影响。这里主要的区别就是你可以在串行化事务处理中执行任何需要的DML语句。

4、ISOLA TION LEVEL READ COMMITED

这个命令大体相当于将事务处理设置为READ WRITE,由于它是设置隔离层次时Oracle默认操作模式,所以很少使用。如果用户在会话的前面使用ALTER SESSION命令,将用户会话的事务处理的默认隔离层次从READ COMMITED改变为SERIALIZABLE,那么就可能会用到这个命令。使用ISOLA TION LEVEL READ COMMITED命令可以重置默认值。

5、SET CONSTRAINTS

3 事务处理的ACID属性

●原子性

●一致性

●隔离性

●持久性

3.1 原子性

语句级原子性

分析:我们在TP表中成功的插入了一条记录,当我们在执行第二条语句时,由于触发器工作了,触发器成功的完成了T2表的更新。我们可能认为现在T2中CNT的值是2,但是可以看到它的值实际上为1。Oracle保证最初的INSERT(即导致触发器触发的插入语句)是原子性,这个INSERT INTO是语句,所以INSERT INTO的任何副作用都被认为是该语句的一部分。

过程级原子性

在此,我们运行的代码块会忽略所有错误,这两个代码块的输出结果有显著的差别。尽管前面一个P调用没有带来任何改变,但在这里的P调用中,第一个INSERT会成功,而且T2中的CNT列会相应地递增。

注意:如果代码中包含一个WHEN OTHERS异常处理器,但其中没有一个RAISE来重新引发异常,我们认为这样的代码都是有BUG的,它会忽略错误,这就改变了事务的语义。如

相关文档
最新文档