如何动态减少生产数据库的 SQL Server 事务日志?

如何动态减少生产数据库的 SQL Server 事务日志?

我想知道哪种最佳解决方案可以在不停机的情况下减少实时生产服务器中的 SQL Server 事务日志?

  1. 数据库完整备份 - 哪个应该提交事务日志?(例如在 Exchange Server 中?)

  2. 在生产工作时间内从 SSMS 手动执行以下 T-SQL 脚本?

    ------------------------------------------------------------------------------
    -- 奥托·R·拉德克 - http://ottoradke.com
    -- 信息:T-SQL 脚本用于收缩数据库的事务日志。只需设置
    -- 下面的数据库名称并运行脚本,它将缩小
    ——交易日志。
    ------------------------------------------------------------------------------
    ------------------------------------------------------------------------------
    -- 使用事务所在的数据库的名称更新以下行
    ——您想要缩小的日志。
    ------------------------------------------------------------------------------
    使用
    ------------------------------------------------------------------------------
    -- 不要更改此行以下的任何内容。
    ------------------------------------------------------------------------------
    -- 声明变量
    声明@SqlStatement为nvarchar(max)
    声明@LogFileLogicalName为系统名称
    -- 将数据库改为简单恢复
    设置@SqlStatement = 'ALTER DATABASE' + DB_NAME() + '设置恢复简单'
    执行(@SqlStatement)
    -- 确保它已被更改
    从 sys.databases 中选择 [名称]、[recovery_model_desc],其中 [名称] = DB_NAME()
    -- 设置日志文件名变量
    从 sys.database_files 中选择 @LogFileLogicalName = [名称],其中类型 = 1
    -- 缩小日志文件
    DBCC Shrinkfile(@LogFileLogicalName,1)
    -- 将数据库恢复为完整状态
    设置@SqlStatement = 'ALTER DATABASE' + DB_NAME() + '设置恢复完整'
    执行(@SqlStatement)
    -- 确保已改回完整
    设置@SqlStatement = 'SELECT [name], [recovery_model_desc] FROM ' + DB_NAME() + '.sys.databases WHERE [name] = ''' + DB_NAME() + ''''
    执行(@SqlStatement)
    ------------------------------------------------------------------------------
  1. 为数据库缩减创建维护计划——按需?

那么这些方法的区别和目的是什么?

任何帮助将不胜感激。

谢谢。

答案1

您是否使用日志备份进行时间点恢复?如果没有,那么管理日志文件的一种方法是将恢复模式设置为简单,然后从 SSMS 手动收缩数据库(右键单击数据库...任务...收缩...数据库)。这将为您收缩数据库文件。简单恢复模式应该使日志保持一致。

相关内容