1、问题的提出
��在DBMS中,事务管理器和恢复管理器提供对事务原子性和持久性实现的支持。这是一个非常复杂的过程,我们以一个简单但效率极低的方案为例,理解DBMS中实现事务原子性和持久性的原理。这个方案就是影子数据库(Shadow-Database)方案,它的前提条件是:
��-�某一时刻DBMS中只有一个活动事务;
��-�要处理的数据库只是磁盘上的一个文件;
��-�磁盘上有一个称为db-pointer的指针指向该文件。
2、影子数据库方案
��在影子数据库方案中,欲更新数据库的事务首先创建数据库的一个完整拷贝,所有的更新都在新建的拷贝上进行,而原始数据库(称为影子拷贝)则原封不动。如果任何时候DBMS中的事务不得不中止,则新拷贝简单地被删除,原始数据库不受任何影响;如果事务执行完成,则它的提交过程如下:首先操作系统确保数据库新拷贝上的所有页已被写到磁盘上(在Unix系统中,flush命令用来达到这个目的)。在刷新完成后,db-pointer指针被修改为指向数据库的新拷贝,而影子拷贝则被删除。
��如图10-3-1所示,在影子数据库方案中,只有当修改后的db-pointer指针写到磁盘上后,事务才算是提交了。因此无论是在db-pointer指针修改之前或之后发生故障,都能保证事务的原子性和持久性。现在问题的核心变成了db-pointer指针写操作的原子性!而磁盘系统提供扇区或块更新的原子性。
|