SQL Server 使用各数据库的事务日志来恢复事务。事务日志是数据库中已发生的所有修改和执行每次修改的事务的一连串记录。事务日志记录每个事务的开始。它记录了在每个事务期间,对数据的更改及撤消所做更改(以后如有必要)所需的足够信息。对于一些大的操作(如 CREATE INDEX),事务日志则记录该操作发生的事实。随着数据库中发生被记录的操作,日志会不断地增长。
事务日志记录页的分配和释放,以及每个事务的提交或回滚。这允许 SQL Server 采用下列方式应用(前滚)或收回(回滚)每个事务:
在应用事务日志时,事务将前滚。SQL Server 将每次修改后的映象复制到数据库中,或者重新运行语句(如 CREATE INDEX)。这些操作将按照其原始发生顺序进行应用。此过程结束后,数据库将处于与事务日志备份时相同的状态。
当收回未完成的事务时,事务将回滚。SQL Server 将所有修改前的映象复制到 BEGIN TRANSACTION 后的数据库。如果遇到表示执行了 CREATE INDEX 的事务日志记录,则会执行与该语句逻辑相反的操作。这些前映象和 CREATE INDEX 逆转将按照与原始顺序相反的顺序进行应用。
在检查点处,SQL Server 确保所有已修改的事务日志记录和数据库页都写入磁盘。在重新启动 SQL Server 时所发生的各数据库的恢复过程中,仅在不知道事务中所有的数据修改是否已经从高速缓冲中实际写入磁盘时才必须前滚事务。因为检查点强迫所有修改的页写入磁盘,所以检查点表示启动恢复必须开始前滚事务的位置。因为检查点之前的所有修改页都保证在磁盘上,所以没有必要前滚检查点之前已完成的任何事务。