我一直在考虑在我们的一些开发机器上恢复一些磁盘空间。
这些机器没有备份,没有直接开发,也没有得到很好的维护。
任何恢复都是从 PRD 或 PRE-PRD 到 DEV 环境,在这个特定的 DEV 环境中没有什么是关键的。
这些数据库上的恢复模型必须保留,FULL
因为它是这样规定的(尽管没有进行实际备份)。
由于这些数据库在某些情况下已经存在了很长一段时间而没有备份,我正在寻找一种适当的方法来缩小它们的日志。
我发现了两种可能达到目的的方法:
BACKUP LOG [databasename] TO DISK=’NUL:’
其次是收缩日志。
或者:
ALTER DATABASE [databasename] SET RECOVERY SIMPLE;
ALTER DATABASE [databasename] SET RECOVERY FULL;
其次是收缩日志。
我的实际问题:
这两种方法有什么区别?
有什么我想念/忽视的东西吗?
对于这种情况,我更喜欢这样做的方法(我添加
WITH NO_COMPRESSION
以防万一服务器默认设置是使用压缩,因为当生成的文件无论如何都不会占用任何空间时,使用额外的 CPU 几乎没有意义):我更喜欢这种方法而不是切换到
SIMPLE
然后再返回的原因FULL
是它不会改变整个备份过程。这样您就可以在环境之间获得更高的一致性。它还允许您为备份过程提供一个测试环境,因为它与生产环境中的环境没有什么不同。如果将文件发送到NUL:差异太大,则只需将其发送到可以删除备份文件的文件夹即可。翻转到
SIMPLE
然后再返回到FULL
使测试重要DIFF
备份变得更加困难,因为您需要先进行FULL
备份。因此,如果您每周进行一次 FULL 备份并在一周的其余时间进行 DIFF,那么如果在每周备份之前完成然后翻转SIMPLE
然后返回将起作用,但在一周中的任何其他时间都不起作用。另一方面,可以在一周内的任何时间进行备份并将其定向到NUL:或删除备份文件。FULL
FULL
LOG
此外,进行
LOG
备份并将其定向到NUL:或删除备份文件可以让您维护一个预先生成的 LOG / .ldf文件。在这一点上,您可以使用DBCC SHRINKFILE来强制执行空 LOG 文件的最大初始大小,而不会被由于重新索引或其他原因而增长很多的文件所困扰。请注意,删除您的 LOG 备份意味着您将无法恢复到 FULL / DIFF 备份之间的时间点。当然,如果您一开始就没有 FULL / DIFF 备份,那么这是一个有争议的问题。
当你这样做时
BACKUP LOG [databasename] TO DISK=’NUL:’
,它就像备份到一个不存在的驱动器,它就像一个普通的日志备份,但它实际上不备份日志并且以某种方式伪造,不占用任何空间。这并不是一个好的做法,但既然你说这是 DEV 而不是关键,你可能会接近,只有当你处于驱动器上几乎没有任何空间并且可以使系统关闭的情况时。
如果您的空间不是那么糟糕,您应该遵循第二种方法,首先进行日志备份,然后将恢复模式从 FULL 更改为 Simple,然后相应地更改回 FULL。
考虑到,恢复时间点在这里不是问题,
然后相应地调整文件设置/增长
除了上述内容,请阅读 Aaron 的回答Why Does the Transaction Log Keep Growing or Run Out of Space? 为了更好地理解