博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Automatic Truncation of Virtual Log Files(VLFs的自动截断)
阅读量:7060 次
发布时间:2019-06-28

本文共 2547 字,大约阅读时间需要 8 分钟。

sql server会在一下三种情况下认为你不需要维护日志备份:

  • 使用BACKUP LOG WITH NO_LOG 或者 BACKUP LOG WITH TRUNCATE_ONLY来进行日志备份
  • 简单恢复模式
  • 从来没有进行过完整备份

对于上述情况,数据库日志会在“足够满”的时候自动截断,以使VLFs重用。日志截断虽然是VLFs重用,但是不会收缩日志文件的大小。

---实验:验证日志的自动截断与日志收缩-------------------------------新建pubs数据库USE pubs--step1:查看pubs数据库中的VLFs信息,第一个VLFs的FSeqNo=23,Status=0,其他都为0DBCC LOGINFO--step2:查看pubs数据库是不是出于自动截断模式,如果last_log_backup_lsn为null则表示自动截断模式 SELECT last_log_backup_lsnFROM master.sys.database_recovery_statusWHERE database_id = db_id('pubs')GO--step3:创建表CREATE TABLE newtable (a int)GOINSERT INTO newtable VALUES (10)INSERT INTO newtable VALUES (20)INSERT INTO newtable VALUES (30)GODECLARE @counter intSET @counter = 1WHILE @counter < 1000 BEGIN    UPDATE newtable SET a = a + 1    SET @counter = @counter + 1END--step4:再次查看VLFs信息,VLFs的顺序是27,24,25,26.Status的顺序是2,0,0,2DBCC LOGINFO--step5:备份数据库--定义备份设备EXEC sp_addumpdevice 'disk', 'PubsBackup', 'D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup\pubs.bak';--step6:备份到逻辑设备BACKUP DATABASE pubs TO PubsBackup;--step7:再次查看VLFs信息,发现Status顺序变成了2,0,0,0.表示VLFs被截断.DBCC LOGINFO  --step8:查看pubs数据库是不是出于自动截断模式,如果last_log_backup_lsn为null则表示自动截断模式 --此时的last_log_backup_lsn=27000000015900042,这个LSN就是备份操作的first lsn,也就是日志不再自动搜索SELECT last_log_backup_lsnFROM master.sys.database_recovery_statusWHERE database_id = db_id('pubs')GO--step9:再次执行更新操作,发现日志文件增长,从原来的1024kb增长到1536kbDECLARE @counter intSET @counter = 1WHILE @counter < 1000 BEGIN    UPDATE newtable SET a = a + 1    SET @counter = @counter + 1END--step10:查看VLFs,我们发现新增了两个VLFs.DBCC LOGINFO--------------------------------------在2005中shrink日志文件的操作,在2008及以后版本不支持DBCC SHRINKDATABASE (pubs)BACKUP LOG pubs WITH TRUNCATE_ONLY--在2008以后不支持了------------------------------------step11:2008以后shrink文件方法,切换恢复模式,然后执行收缩.最后切换回来.USE pubs;GO-- Truncate the log by changing the database recovery model to SIMPLE.ALTER DATABASE pubsSET RECOVERY SIMPLE;GO-- Shrink the truncated log file to 1 MB.成功将日志文件从1536kb缩小到1024kb,并且只有一个VLFs的Status=2DBCC SHRINKFILE (2, 1);  -- here 2 is the file ID for trasaction log file,you can also mention the log file name (pubs_log)GO-- Reset the database recovery model.ALTER DATABASE pubsSET RECOVERY FULL;GO--------------------------------------------

在《inside sql server 2005: the storage engine》的“SIMPLE Recovery Model”章节提到一句话“In fact, as soon as you change you database to SIMPLE recovery model, the log will be truncated.”也就是一旦我们将数据库恢复模式修改成简单恢复模式,数据立刻截断日志。所以在我们上面的实验中,要收缩shrink日志,但是我们并没有进行截断truncate操作,其实截断操作已经隐含在切换数据库模式的那一步了。

还有在checkpoint的时候,数据库也会截断日志,截断的是MinLSN之前的VLFs。

 

转载地址:http://peyll.baihongyu.com/

你可能感兴趣的文章
二维条码防伪封签是怎样进行防伪的
查看>>
今天,让Mac更好用!
查看>>
Nginx 反向代理配置及403出现原因
查看>>
64位Fedora运行32位C++程序所需的类库
查看>>
Linux 第36,37天 team,taskset,pmap
查看>>
探究施乐打印机新功能
查看>>
简单道理
查看>>
linux下查看自己公网IP
查看>>
netbios功能简介
查看>>
《孤独的美食家》60家餐厅超全觅食攻略,吃货必收!
查看>>
设计模式 CSDN 网页
查看>>
如何将不带www的根域名301重定向到带www的主域名
查看>>
Scala深入浅出实战经典《第88讲:Scala中使用For表达式实现map、flatMap、filter》笔记...
查看>>
Ubuntu中部署Eclipse+Tomcat
查看>>
datadog collectd的主流程分析
查看>>
简单python脚本
查看>>
由浅到深学习JDBC二
查看>>
Jenkins集成SonarQube 实现构建项目同时审查代码
查看>>
文本数据处理之awk
查看>>
JavaScript基础之String对象和RegExp对象
查看>>