WEB开发网
开发学院数据库DB2 崩溃恢复的基石 阅读

崩溃恢复的基石

 2008-12-15 16:37:34 来源:WEB开发网   
核心提示: 还可以通过执行 COMMIT 或 ROLLBACK SQL 语句显式地终止事务,这些语句的基本语法是:COMMIT <WORK>和ROLLBACK <WORK>在 COMMIT 终止事务时,崩溃恢复的基石(2),会将该事务从开始时对数据库所做的所有修改变成永久性的,

还可以通过执行 COMMIT 或 ROLLBACK SQL 语句显式地终止事务。

这些语句的基本语法是:

COMMIT <WORK>

ROLLBACK <WORK>

在 COMMIT 终止事务时,会将该事务从开始时对数据库所做的所有修改变成永久性的。使用 ROLLBACK,所有修改都将撤销。

事务所做的未提交的修改对其他用户和应用程序来说是无法访问的,除非那些用户和应用程序使用的是未提交读(UR)隔离。然而,一旦提交了事务所做的修改,它们对于所有其他用户和应用程序来说就都是可以访问的了,并且只能通过执行新事务中的新 SQL 语句来删除。

事务日志记录

在向一个基表进行 INSERT 时,首先在缓冲池中创建一条记录,该缓冲池与指定该表的数据存储于何处的表空间相关联。每次更新或删除一条记录时,就从存储器中检索包含该记录的页面,并复制到适当的缓冲池中,然后由 UPDATE/DELETE 进行修改。一旦进行了这一修改,就会向日志缓冲器写入一条反映该动作的记录,日志缓冲器是内存中的另一指定存储区。(为日志缓冲器预留的真正存储大小是由 logbufsiz 数据库配置参数控制的。)如果执行 INSERT,就会写入一条包含了新行数据值的记录。当出现删除时,就写入一条包含了该行原始值的记录。如果执行 UPDATE,就写入一条包含了该行原始值和新值的记录。(在大多数情况下,通过用该行的更新值在原始值上执行 EXCLUSIVE OR,为更新操作生成日志记录。)最终,当执行 INSERT、UPDATE 或 DELETE 的事务终止时,就将相应的 COMMIT 或 ROLLBACK 记录写入日志缓冲器。

每当激活缓冲池 I/O 页面清理器,日志缓冲器本身已满,或者提交或回滚事务时,就立即将日志缓冲器中所存储的所有记录写入磁盘上所存储的一个或多个事务日志文件中。如果发生系统故障,日志缓冲器的不断刷新将最小化可能丢失的日志记录数目。一旦将与特定事务相关联的所有日志记录(包括相应的 COMMIT 或 ROLLBACK 记录)成功具体化(externalize)为一个或多个日志文件,就会将事务本身的结果复制到适当的表空间容器以永久存储。(已修改的数据页本身仍保留在内存中,在必要时可以快速进行访问;它们最终将被改写。)该过程称作写前日志记录(write-ahead logging),保证对数据所做的修改在记录到数据库之前,总是被具体化为日志文件。(见图 1)

上一页  1 2 3 4  下一页

Tags:崩溃 恢复 基石

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接