1、 数据库应用上机实验报告 1 班 级: 学 号: 姓 名: 实验目的: 通过本次上机 了解 oracle 数据库下用户的 各项权限,通过 测试 并发 了解 oracle数据库系统提供的锁机制以及事务隔离级别 , 理解索引机制的作用以及原理 。 实验内容: 用户安全 通过 iSqlplus 建立自己的用户,并给予相应的授权,体会用户、角色和权限的关系 并发 体会锁机制,通过同时启动两个会话,同时更新同一个数据,造成两个会话对一个数据的争用,来体会锁机制 (一个会话在等待)。 创造死锁,通过同时启动两个会话,分别对两个资源进行交叉加锁,来实现死锁( Oracle 会检测出该死锁) 隔离级别,赋予事
2、务不同的隔离级别,通过启动两个会话来体会并发。设计实验用例,体现多事务的读写竞争。 要求:记录实验结果,撰写实验报告,要求在报告中明确实验目的、实验内容、实验结果和分析。 索引 通过 Sqlplus 的 set autotrace 语句跟踪 B*树索引,升序与降序的混合 位图索引,多个位图索引数据的组合查询 位图联接索引,使用 HR 用户下表的例子 基于函数的索引,使用课件中的例 子,伪造数据 数据: HR 用户表数据,或课件的例子程序伪造数据 针对上述四种索引机制,设计实验,要求体会 Oracle 使用索引路径查询和不使用索引路径查询的情况。考虑索引涉及属性的 NULL 情况 涉及外键约束中
3、外键不加索引的查询路径 要求:撰写实验报告,写明实验目的、实验内容、实验结果和实验分析。 实验结果与分析: 建立自己的用户,并对其做设置权限等操作。 写锁: 在事务 1 对表 A 进行更新,不提交,在另一个事务 2 下再次对 A 表更新时不执行操作,事务 2 被锁。 当 事务 1 提交后,事务 2 才可以再次对同一个表进行操作。 死锁: 所谓死锁: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。 由于资源占用是互斥的,当某个进程提出申请资源后,使得有关
4、进程在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产生了一种特殊现象:死锁。 ” 在事务 1 中对 A 进行 update 操作,但不提交。在事务 2 中尝试对同一个表进行操作,这时会发生锁死 。 隔离级别: 事务指定一个隔离级别,该隔离级别定义一个事务必须与由其他事务进行的资源或数据更改相隔离的程度。隔离级别从允许的并发副作用(例如,脏读或虚拟读取)的角度进行描述。 使用 set transaction isolation level read committed 来设置隔离级别。在事务 1 查看表 A 信息,在事务 2 中对表 A 进行更新,再回到事务 1 中查看表 A信息发现
5、事务 2 的更新并没有执行,事务 2 提交后表 1 才被修改成功。 索引: B*树索引:传统索引,所有数据库最常用的索引。 类似于二叉树,能根据键提供一行或一个行集的快速访问,通常只需很少的读操作就能找到正确的行。 位图索引:在一颗 B*树中,通常索引条目和行之间存在一种一对一的关系,而对于位图索引,一个索引条目则使用一个位图同时指向多行,位图索引适用于高度重复而且通常只读的数据。 位图联结索引:提供了一种逆规范化的方法。 例如 emp 和 dept 表,查找 ” 多少人在位于波士顿的部门工作 “ 。通过使用位图联接索引,则可以在 emp 表上对 loc 列建立索引。 基于函数的索引:就是 B*树索引或位图索引,将一个函数计算得到的结果存储在行的列中,而 不是存储列数据本身。可以把基于函数的索引看作一个虚拟列上的索引 建立一个表 M,并插入 100 组信息。 使用 create index M_score1 on M(score);建立索引。使用 select index 进行查询。 使用下面的语句查看查看建立的表和索引: 实验小结: 通过本次上机对数据库应用这门课程所学的知识有了真正的实践,学习了使用oracle 的方法,对用户安全,锁,索引都有了一定的了解,对数据库有了更深的认识。