SQL Server 2008 下的备份和日志收缩
在SQL Server 2008下,网上以前流行的截断日志并收缩文件的方法不适合了,报语法错误。
同时因为我的数据库日志增长非常快,大概每天在1G以上,因此必须对其进行收缩。
经过在系统上的测试,感觉用SQL SERVER的维护计划更可行,现将操作方式简介如下:
注:下面的说明中也提到了使用差异备份,因为数据库文件增长也非常快,因此此处也稍作说明。关注收缩数据库日志文件的可以忽略此部分内容。
1、创建维护计划:
2、创建子计划
a、完整备份,每周一次
b、差异备份,每天一次,或每天多次
c、日志备份,每天一次
d、收缩数据库
e、删除备份文件,删除四周以前的备份文件,每天执行
f、清除日志备份文件,每天执行
3、关于日志文件的增长
如上所述,日志文件每天进行备份,同时每天清除旧的备份文件,这样日志文件虽然做了备份,但不会保留太多。(当然,如果你需要保留日志文件,则可以使用与数据库备份文件相同的清除策略)
日志文件在备份以后,在收缩数据库时,就可以回收已备份的日志文件的空间。但文件大小不会减少,只是增加了可用空间。但这样是可以满足我们的要求的:比如每天可能产生大约1G的日志,而每次备份并回收后,可以收回绝大部分空间,收回的空间则可以满足当天的日志使用了。
此方法不使用网上的那种截断的语句,完全使用SQL SERVER 2008的维护计划来执行,安全,可靠,定时,不用再担心日志文件占满磁盘空间了
相关文档:
TEMPDB不支持自动压缩,且它的数据库和文件压缩能力是有限制的;
如不得不压缩TEMPDB的大小,建议使用离线功能,如下操作:
1.停止SQL SERVER服务;
2.找到sqlservr.exe在磁盘中的位置;
3.使用sqlservr.exe输入命令sqlservr -c -f,这样启动SQL SERVER时,TEMPDB的大小能够保持最小;
4.使用TSQL命令:ALTER DATA ......
第一步, 在收缩前先查看日志的大小:
SELECT *
from sysfiles
WHERE name LIKE ' % LOG %'
GO
第二步, 把数据库的恢复模式设成”简单”:
ALTER DATABASE 库名 SET RECOVERY SIMPLE
GO
第三步, 运行checkpoint指令, 把dirty page写进数据库:
CHECKPOINT
GO
第四步, 截断日志:
BACKUP ......
今天做SQL 优化,查找执行计划时,执行计划,发现此执行计划与以往的计划有所区别;找录互联网,终于找一篇有关研究比较深入的文章;
原执行计划使用的是索引扫描,突然一下会使用索引覆盖技术,效率大增;
SELECT * 的真相:索引覆盖(index coverage)
SELECT *的效率很糟糕吗?当然,所有人都知道这一点,但是为什么 ......
大型系统的生产环境,一般情况下,我们评价一条查询是否有效率,更多的是关注逻辑 IO( 至于为什么,回头补一篇 ) 。我们常说,“要建彪悍的索引”、“要写高效的 SQL ”,其实最终目的就是在相同结果集情况下,尽可能减少逻辑 IO 。
1.1 where 条件的列上都得有统计信 ......