SQL Server 事务日志截断和日志文件缩小

Acronis Backup 不会在创建磁盘备份后截断事务日志。如果您不使用 Microsoft SQL Server 的本地备份引擎或是能自动管理事务日志的任何第三方备份解决方案,您可以通过以下方法来管理日志。

使用 SQL Server Management Studio 进行日志截断

当您将数据库切换至简单恢复模式时,事务日志将自动截断。

  1. 将数据库切换至简单恢复模式:
    1. 运行 Microsoft SQL Server Management Studio 并连接至实例。
    2. 右键单击数据库,然后单击属性。此操作将打开数据库属性对话框。
    3. 选择页面窗格中,单击选项
    4. 恢复模式列表框中,选择简单模式列表。
  2. 事务日志文件将自动截断。
  3. 按照步骤 1 中所述的相同方式,将数据库切换回完整或大容量日志恢复模式。
自动进行日志截断和缩小

您可使用脚本自动执行上述截断操作并(可选地)进行日志文件缩小。如果您将该脚本添加至备份后命令,日志将在备份后立即截断并缩小。此方法假设您具备编写 Transact-SQL 脚本的技能并且熟悉 sqlcmd 实用工具。

有关 Transact-SQL 和 sqlcmd 的更多信息,请参阅以下文章:

对 SQL 实例自动进行事务日志截断和缩小

  1. 使用以下模板创建能够截断并缩小实例数据库日志文件的脚本:

    USE database_name
    ALTER DATABASE database_name SET RECOVERY SIMPLE;
    DBCC SHRINKFILE(logfile_name);
    ALTER DATABASE database_name SET RECOVERY FULL;

    在最后一个字符串中,SET RECOVERY 值取决于具体数据库的原始恢复模式,该值可为 FULLBULK_LOGGED

    具有两个数据库(TestDB1 和 TestDB2)的实例示例:

    USE TestDB1;
    ALTER DATABASE TestDB1 SET RECOVERY SIMPLE;
    DBCC SHRINKFILE(TestDB1_log);
    ALTER DATABASE TestDB1 SET RECOVERY FULL;

    USE TestDB2;
    ALTER DATABASE TestDB2 SET RECOVERY SIMPLE;
    DBCC SHRINKFILE(TestDB2_log);
    ALTER DATABASE TestDB2 SET RECOVERY BULK_LOGGED;

  2. 将以下 sqlcmd 命令添加至备份后命令

    sqlcmd -S myServer\instanceName -i C:\myScript.sql

    其中:

对多个 SQL 实例自动进行事务日志截断和缩小

如果计算机中有多个实例且您想对这些实例应用上述过程,请按照以下说明操作:

  1. 为每个实例创建一个单独的脚本文件(如,C:\script1.sql 和 C:\script2.sql)。
  2. 创建将包含对应实例相关命令的批处理文件(如,C:\truncate.bat):

    sqlcmd -S myServer\instance1 -i C:\script1.sql
    sqlcmd -S myServer\instance2 -i C:\script2.sql

  3. 在备份后命令中,指定该批处理文件的路径。