商家名称 | 信用等级 | 购买信息 | 订购本书 |
![]() |
SQL Server 2008数据库技术内幕(李爱武著) | ![]() |
|
![]() |
SQL Server 2008数据库技术内幕(李爱武著) | ![]() |
版权页:
插图:
这里未显示处于非活动状态的重做记录,并不是因为这些记录被删除。当执行delete操作删除表中的记录时,在这些记录所在的数据页中,对应被删除记录的槽中的偏移量数据会设置为0。而执行checkpoint操作后,这些非活动重做记录所在日志段中的数据却不会发生任何改变,也就是说,非活动记录并未删除。
将数据库设置为简单恢复模式,使用fn_dblog函数查询重做数据信息时,日志记录从数据库当前的MinLSN开始显示,即只能显示重做文件中的活动部分。
假设执行checkpoint操作得到MinLSN中的VLF序号为n,上次checkpoint操作的开始LSN中的VLF序号为m,若n>m,则序号为n,n+1,…,m—1的VLF都不包含活动日志记录,这些VLF的状态会被此次checkpoint操作设置为可重用。
12.2 实例恢复过程
对事务执行commit操作会把内存缓冲区中的重做数据写入重做日志文件,并把commit操作作为单独的日志记录写入重做日志文件,这些操作都完成即标志着此事务提交操作成功执行。commit操作并不会把事务修改的数据写入磁盘的数据文件,也就是说,提交后的事务,其修改的数据可能并未存入磁盘。
另外,由于内存的压力和checkpoint操作的执行,SQL Server可能已经把未结束事务修改过的部分数据写入磁盘。
在任何时刻,数据库中的事务都会存在以下两种状态或其中一种:
?提交的事务,其修改的数据尚未写入磁盘。
?未提交的事务,其修改的数据已经部分写入磁盘。
如果SQL Server服务某个时刻出现故障,则下次启动时,SQL Server要先解决事务的数据完整性问题。首先执行前滚操作,把数据库的状态恢复到数据库出现故障的时刻,如果提交的事务所修改的数据未写入磁盘,则应通过应用重做日志文件中的日志记录并将其重新写入磁盘,如果未提交的事务所修改的数据已写入磁盘,则执行undo操作将其从磁盘撤销。这个过程称为实例恢复。
相关阅读:
更多图书资讯可访问读书人图书频道:http://www.reAder8.cn/book/