--在SQL Server 2005 中,可用使用 BACKUP LOG WITH TRUNCATE_ONLY来迅速清理日志,该命令在 SQL Server2008 及更高版本上被去除。
--BACKUP LOG WITH TRUNCATE_ONLY --该语句相当于将数据库改为简单恢复模式后又改为完整恢复模式,在该语句运行后至最近一次完整备份区间,数据库相当于运行在简单恢复模式下,所有活动日志在 checkpoint后被丢弃,且无法对数据库进行日志备份。
--BACKUP LOG TO DISK='nul' --nul并非null 的错误拼写, nul可以被看成一个虚拟文件,所有写入到 nul文件里的数据都被丢弃,对 SQL Server而言,nul 与其他真实存在的文件一样, SQL SERVER会扫描所有活动日志,将该日志格式化后写入 nul文件,数据写入到nul文件后被操作系统丢弃,然后由操作系统返回确认信息给 SQL Server,然后将活动日志标记为已日志备份,该活动日志所在空间可被 reuse。 --BACKUP LOG TO DISK='nul' 相当于正常备份日志然后删除日志文件,并不破坏备份日志链。
--总结:在SQL SERVER 2008 及以后版本中,可以通过修改数据库恢复模式方式来实现 TRUNCATE_ONLY功能,对于数据库已做镜像且数据库日志巨大的情况,如果不需要当前日志,可以使用 BACKUP LOG TO DISK='nul'方式来备份日志然后收缩。
--注意: --1>BACKUP LOG TO DISK='nul' 会导致日志不可用再恢复。