数据库SqlServer日志备份和恢复
大家在工作中可能会遇到这样的场景:
壁橱里的小王:哎呀!存放数据库的磁盘满了/为什么数据文件才100M,日志文件已经暴涨到了200G/数据库插入操作hang住了!!! 大佬,怎么肥四?
隔壁老王:日志太大,快做日志收缩。
壁橱里的小王:老王,我做了啊,但是日志没有变小啊。
隔壁老王:哦,那你做了日志截断吗?
壁橱里的小王:。。。。啥意思
如果大家也和壁橱里的小王一样,一脸懵逼,截断&收缩傻傻分不清楚,那么,请往下看吧。
目录
一 日志
二 日志备份
三 日志还原
四 常用工具
五 工作中苦逼的例子
一 日志
1 日志备份的意义:
- 为防止数据损坏而提供的保障。
- 数据归档
- 数据迁移
2 日志的本质 —— VLF
一个数据库可以有多个日志文件,但是,逻辑上他们可以看成一个。
SQL对日志文件的管理,是将逻辑上的这一个ldf,分成多个逻辑上的虚拟日志文件(virtual log files,简称VLF)
日志以整个VLF作为单位进行增长和收缩,所以
——日志文件是顺序读取,不像data page并行访问,所以日志文件分成多个不会有性能上的提升。
3 VLF状态
活动: 日志活动部分(未commit的活动事务)——只要VLF中包含了活动日志,就认 为是活动VLF。
可恢复: 老LSN之前的日志 作用就是保存之前记录,以帮助回滚恢复到之前的某一状态——还未截断
可复用:老LSN之前的日志没用了,就可以复用了。——已经截断(truncated)
未用:VLF还未被使用复制代码
如何理解呢?请看下图:
这是一个物理日志文件,有8个VLF。使用顺序看FSeqNo。
状态status——2:VLF活动或可恢复 。 0:VLF可复用or完全没使用过
截断(truncated)——只是将可恢复状态的VLF转换到可重用状态
相关文章