实验11-事务与并发控制

更新时间:2024-05-01 22:53:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验十一 事务与并发控制

实验目的:

通过本次实验了解事务的概念,主要了解事务的ACID特性、处理过程。在Oracle中设置事务的隔性层事务处理语句,锁对数据库的并发控制的影响。 实验要求:

对事务进行commit和rollback的操作 设置事务隔离层

存储点 (savepoint)

表锁和行锁(锁的粒度影响并发能力) 查询锁的信息(V$LOCK, V$LOCKED_OBJECT)

实验环境: Oralce 10g 实验步骤:

分别使用scott和sys登录数据库, 分别查询scott模式中的表:salgrade scott的操作: sys的操作: update salgrade set losal = 500 where grade = 1; delete salgrade where grade = 3

查询表salgrade,会发现

数据没有变化。

commit; 或disconn

或使用任何ddl语句

查询表salgrade,会发现 数据已经变化变化。 从中体会Oracle对数据库的操作是隐含事务的开始,而结束是以commit、rollback、

disconn或使用任何DDL语句。

SQL SERVER的事务操作默认是每一语句都是一个事务,如果多个SQL操作的话,要用begin transaction表示事务开始,之后是SQL操作,结束事务时要使用commit或rollback命令。 dd

设置事务隔离层

事务隔离层表示事务之间的隔离程度或影响程度,Oracle默认的事务隔离层是read committed,同学们在第一个实验已经体会到,只有递交的数据才能被查询到。 设置会话的事务隔离层为串行:

set transaction isolation level serializable;

或alter session set isolation_level = serializable; 在scott中执行该语句,查询salgrade 在sys中: update scott.salgrade

set losal = 10 where grade = 1;

commit;

在scott中再次查询salgrade,发现结果还是一样,说明事务隔离层serializable设置后,事务与事务被隔离开。

要查询sys更改的数据,必须结束当前事务后,恢复默认read committed 或重新设置事务隔

离层。

存储点 (Savepoint) 在scott中进行操作:

update salgrade set losal = 0 where grade = 1; insert into salgrade values(8,8000,8888); savepoint cns; select * from salgrade;

insert into salgrade values (9,9000,9999); rollback to cns;

select * from salgrade;

在尝试没有没有savepoint的操作,体会savepoint的作用:对较长的事务处理过程中,由于各种意外的可能发生,造成事务的回滚,从而浪费了大量的资源,如果使用了存储点,则事务回滚到指定的一个存储点,该存储点之前的事务依然有效,注意,这时候事务依然没有结束。

(表级)共享锁 (S – Share)

LOCK TABLE EMP IN SHARE MODE;

其他用户只能看,不能修改,能加所有共享锁。 (表级)排他锁 (X – Exclusive) 其他用户只能看,不能修改,不能加其他锁。 在scott中操作:

lock table salgrade in exclusive mode; update salgrade set losal = 10 where grade=1; 在sys中执行操作:

update salgrade set losal = 202 where grade=2;

这个操作一直在等待,一直等到scott将salgrade中的锁释放:commit,rollback; 行级共享锁(RS – Row Share)

允许用户进行任何操作,禁止排他锁。 在scott中操作:

lock table salgrade in row share mode;

分别使用scott和sys重复上面的操作,体会锁的粒度与并发处理能力之间的关系。 行级排他锁(RX – Row Exclusive)

允许用户进行任何操作,禁止共享锁和共享行级排他锁。 共享行级排他锁

只允许其他事务加行级共享锁。

LOCK TABLE DEPT IN SHARE ROW EXCLUSIVE MODE; 不允许其他事务修改。

查询锁的信息(V$LOCK, V$LOCKED_OBJECT) Scott是没有权限对这些数据字典进行查询! 锁的总结:

一、共享锁:用于读数据操作; 二、排他锁:独占表;

三、共享行级排他所:兼容性最好,并发能力最高! 四、行级排他锁:与共享锁和共享行级排他锁不兼容。

五、共享行级排它锁只与行级共享锁兼容,不允许其他事务更新。

只有当前的事务结束,才能解锁!

本文来源:https://www.bwwdw.com/article/7geg.html

Top