sqlserver 恢复模式及避免日志爆满的方法

recovery simple
循环日志,空间自动回收,不可备份日志,恢复时仅能恢复到数据库备份时间点;
用于落地数据或测试环境或OLAP,不推荐用于生产OLTP
有时候distribution过大也可置为simple

recovery bulk_logged
常规操作日志正常记录,特定操作时仅记录少量日志;
恢复时特定操作将做回滚处理,其他操作正常恢复到当前

特定操作:
1、select * into test2 from test1 where 1=1
2、DTS数据导入
3、bulk into

注意:特定操作不等于大数据操作,例如:
insert into test2 select * from test1
delete  from test2 where id<100000
将会记录全部日志 


优化表复制
--1、改为bulk_logged恢复模式
--操作前日志使用率
dbcc sqlperf(logspace)
alter database testdb set recovery bulk_logged

--2、推荐将sql1替换sql2
sql1:select * into test2 from test1 where 1=1 

sql2:insert into test2 select * from test1

- -操作后日志使用率,发现变化不大
dbcc sqlperf(logspace)

--3、重建索引
create index on test2

--4、重新改为full恢复模式
alter database testdb set recovery full

即优化了日志空间和插入速度,又优化了索引(大量数据插入,会引起大量索引碎片)

full recovery <--> BULK_LOGGED recovery
切换时不会造成日志链断裂,所以也不用担心日志不能备份


recovery full
通过事务日志将数据库还原到任意的时刻点,
full模式下的空间优化:

一、事务内进行大批量的数据删除、更新操作,引起的日志爆满
1.多次少量原则,每次写入一定量的日志
2.手工触发checkpoint,每次发生checkpoint时会自动截断事务日志

二、复制时引起的日志爆满
复制可以在simple恢复模式下进行

三、完整恢复模式下引起的日志爆满
1.配合备份策略,进行日志归档
2.定期删除历史日志归档文件

四、执行备份的时候,可以截断部分事务日志

五、大批量数据导入的时引起的日志爆满
将恢复模式暂时改为BULK_LOGGED(仅记录回滚所需日志,不记录插入日志),完成后及时改为full


六、使用警报,可以实现日志使用率超过一定量自动归档

七、查看日志空间使用率dbcc sqlperf(logspace)



各模式间切换时注意点

1、SIMPLE->FULL
完成切换后,需要立刻进行差异备份,恢复日志链

2、FULL->SIMPLE
先进行日志备份,因为切换会中断日志链

3、BULK_LOGGED<->full 自由切换

4、simple<->BULK_LOGGED 不常见
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值