微软 SQL 服务器 2005
我想减少数据库的初始大小(使其小于当前大小),然后备份日志文件。这是减少日志大小的安全方法吗?在不减少初始大小的情况下进行日志备份并没有为我带来任何可用空间。
这不是系统数据库,而是用户创建并填充的数据库。
答案1
当数据库恢复模型设置为FULL或BULK-LOGGED时,数据库和事务日志完全分开处理。
因此,备份数据库不会释放日志;您仍然必须备份日志才能重新使用它。
反之亦然,如果日志文件太大(不符合您的需要),则调整数据文件大小不会产生任何效果;您必须明确备份,然后缩小物理日志。
但是,不要仅仅因为看起来方便就使用自动增长!如果日志文件的大小达到几 GB,并且以 10MB 为增量增长,那么后果将不堪设想,微软网站对此进行了详尽的记录。
简而言之,每次增加或增加日志时,增加的空间都会分成许多新的虚拟日志,从几个到十几个——每次都会发生这种情况。
当您的事务日志以 10MB 的增量从 10MB 增长到 1GB 时,很可能它会被分割成一千个虚拟日志;这会影响性能。
我的建议是计算 - 或者观察 - 在日志备份之间需要多少事务日志,将其加倍,然后将日志设置为该大小。
然后禁用自动增长并实施对日志利用率的监控,以便在日志利用率超过 90% 左右时发出警告。
最好的方法是每隔一段时间手动添加几百MB,从而将碎片降至最低。
答案2
不确定这是否是正确的方向,但 log rotate 不会为您做到这一点吗?我假设您正在运行 Linux。基本上,它会复制日志文件,压缩它,然后删除日志文件(或根据 logrotate 的配置截断它),并在压缩或 HUP 之后继续写入日志文件和压缩时预处理的所有内容;这又是 Linux 上的 logrotate。
如果您正在运行 Windows,我相信您可以编写一些脚本,除非这是 Windows 可以处理的内容,但总的来说,您可能希望压缩日志文件,然后开始每天/每周/每月(取决于您的要求)将新副本写入您的日志。