一、 还原数据的作用YashanDB数据库的还原数据都是存储在还原表空间中其作用主要体现在以下3个方面首先还原数据用于支持查询的一致性读取。为了保证在同一个事务中前后读取数据的一致性原始信息必须作为还原数据存在。只要保留的还原数据YashanDB数据库就能通过重建数据来满足读取一致性查询的要求。其次闪回技术也是基于还原数据的。例如数据闪回查询可以查找过去某个时间存在的某个版本的数据。只要在还原数据中过去那个时间的还原信息仍存在数据闪回查询就能成功完成。最后还原数据也可用于从失败的事务处理中进行恢复。简单来说还原数据就是历史数据也叫做undo数据。在有些文档中也叫做撤销数据。下面通过一个简单的例子来说明什么是YashanDB数据库的还原数据。1使用scott用户登录数据库。$ yasql scott/tiger2查询员工号为7839的薪水。SQL select sal from emp where empno7839; # 输出的信息如下 SAL ---------- 50003更新员工号为7839的薪水为6000元。SQL update emp set sal6000 where empno7839; # 由于YashanDB数据库默认情况下是自动开启事务的。 # 因此这里执行的update语句将会自动开启一个事务。4重新查询员工号为7839的薪水。SQL select sal from emp where empno7839; # 输出的信息如下 SAL ---------- 60005执行事务的回滚操作。SQL rollback;6重新查询员工号为7839的薪水。SQL select sal from emp where empno7839; # 输出的信息如下 SAL ---------- 5000当这里的第5步执行完成后员工的薪水又恢复回了5000块钱。因此作为历史数据的5000元钱在第3步的update语句之后而在第5步的rollback语句之前就是保存在了还原表空间的数据文件中。二、 还原数据的工作原理下图解释了还原数据的工作原理。从图中可以看出当会话2读取表中数据的时候发现数据已经被更改但对于的事务还未提交。这时候服务器进程就不会将表中新的数据返回给会话2而从还原表空间中读取旧值并将其返回给会话2。在YashanDB数据库中还原数据分为以下三种不同的类型。如下表所示。三、 还原undo数据与重做redo数据与还原undo数据非常类似的一个概念叫做重做redo数据。下表对比了这两种类型数据之间的区别。