SQL Server重做日志管理机制

本文详细介绍了SQL Server中日志文件的管理方式,包括虚拟日志文件(VLF)的概念及其状态,以及在不同恢复模式下如何维护日志序列。此外还讨论了日志文件的增长条件与查询数据库的日志维护状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQL Server把所有日志文件当作一个连续的文件看待。当需要收缩数据库时,SQL Server也是把所有的文件当作一个文件看待,而不是每个文件单独收缩。除非由于磁盘空间的问题,否则没必要使用多个重做文件。

SQL Server把日志文件又划分为多个Virtual Log Files来管理,每个VLF的大小由SQL Server根据日志文件的大小及增长率来确定。一个VLF可以以下面三种状态存在:

  • active:包含活动的事务
  • recoverable:活动事务之前的VLF,还未进行备份,当恢复数据库时要用到
  • reusable:在完全恢复模式下已经备份,或者在简单模式下,未包含活动事务

哈!VLF多么类似于Oracle日志文件组的日志文件成员。

下面几种情况,SQL Server认为用户没有维护一个完整的日志序列:

  • 在完全恢复模式下,从来未进行全库备份
  • 把数据库设置为简单模式
  • 使用命令backup log with no_log或backup log with truncate_only对日志文件进行了手工截断。

在上面任何一种情况下,SQL Server都会直接重用reusable VLF。在这些情况下,因为可以重用VLF,日志文件一般不会自动增长。当数据库处于完全恢复模式时,如果进行了全库备份,而又没有对日志进行过备份,则日志文件会自动增长(当然要求之前对日志文件进行了自动增长配置)。

查询一个数据库是否处于日志维护模式可以使用下面语句(只适用于SQL Server 2005):

select last_log_backup_lsn from sys.database_recovery_status

如果结果为null,则表示数据库未处于日志维护状态。

在简单恢复模式下,SQL Server会使recoverable VLF的数量保持在一定限度之下,从而使得需要进行实例恢复时,启动时间维持在设定的时间之内(可以使用企业管理器设置服务器启动的时间)。如果recoverable VLF超过这个限制,则checkpoint进程会启动起来,把相应dirty page写入磁盘,并把recoverable VLF写入日志文件。

SQL Server的完全恢复模式及简单恢复模式,类似于Oracle的归档与非归档模式,但是SQL Server的日志归档(即日志备份)要手工去做,或者用作业设置为自动日志备份,显然Oracle归档模式的智能化程度高多了。  


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/37724/viewspace-152537/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/37724/viewspace-152537/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值