RDS SQL Server如何收缩事务日志

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

本文主要从以下两种情况介绍RDS SQL Server收缩事务日志的具体操作。

说明

阿里云提醒您:

  • 如果您对实例或数据有修改、变更等风险操作,请务必注意实例的容灾、容错能力,确保数据安全。

  • 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。

  • 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。

日志空间充足

如果日志空间充足,可以通过RDS控制台备份并收缩事务日志功能来处理,系统将自动通过执行日志备份和日志收缩操作来管理和优化事务日志文件的大小。

  1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。

  2. 在左侧导航栏单击备份恢复

  3. 单击备份并收缩事务日志,单击确定

    image.png

    重要
    • 在进行收缩事务日志操作时,系统会自动执行一次日志备份。备份的目的是为了归档事务日志以便本地日志有更高的概率清理成功。

    • 建议在进行收缩事务日志操作前,先检查数据库的日志重用等待状态。

      • 当状态为NOTHING时,可以尝试进行收缩,但收缩的大小取决于事务日志尾部可重用的VLF大小。如果存在活动事务导致尾部VLF状态无法设置为可重用,可能需要再次进行日志备份,并等待当前活动事务完成后,重新检查重用等待状态,直到状态为NOTHING为止。

      • 当状态为LOG_BACKUP时,可能会由于存在活动事务,并不一定收缩成功,收缩操作可能需要多次执行才能成功。

      您可前往数据库管理 > 查看详情页面查看日志文件重用状态(log_reuse_wait_desc)。具体操作,请参见查看数据库属性

  4. 收缩完成后,您可前往RDS实例详情页监控与报警页面,查看最新的日志空间情况。

    image

日志空间不足

警告

以下操作仅适用于紧急状态下进行,一般建议您先扩容磁盘

如果您的数据库服务器提示“事务日志已满”,此时无法通过控制台收缩事务日志,需要您手动执行SQL语句进行处理。收缩事务日志需要占用部分日志空间,所以当日志处于已满状态时只能按命令截断收缩。在数据库服务器上执行如执行以下SQL语句,数据库名称需要进行替换,具体SQL处理步骤如下:

重要

如果日志已满只能截断日志链进行收缩。原则上不允许将数据库修改为SIMPLE简单模式,这种方式会影响RDS的备份链,导致经过当前时间点的所有恢复任务失败。如果紧急情况下您需要通过修改数据库恢复模式为SIMPLE简单模式并需要截断数据库日志链,表示您已经理解并愿意承担上述风险。此时您可忽略执行如下命令后显示的错误信息,数据库日志链依然会断开。

对于基础系列实例,执行如下命令,将数据库的恢复模式设置为SIMPLE模式:

ALTER DATABASE [TestDb]  //[TestDb]为数据库名称。
SET RECOVERY SIMPLE

系统会将恢复模式重置为FULL,不会实际修改数据库恢复模式为SIMPLE,但数据库日志链会断开,并返回如下报错信息:

Msg 50000, Level 16, State 1, Procedure ******, Line 46
Login User [Test11] can't change database [TestDb] recovery model.
Msg 3609, Level 16, State 2, Line 2
The transaction ended in the trigger. The batch has been aborted.

常见报错

  • Q:执行ALTER DATABASE [TestDb] SET RECOVERY SIMPLE后出现如下类似报错,如何解决?

    消息 1468,级别 16,状态 2,第 1 行
    The operation cannot be performed on database "zhttestdb" because it is involved in a database mirroring session or an availability group. Some operations are not allowed on a database that is participating in a database mirroring session or in an availability group.
    消息 5069,级别 16,状态 1,第 1 行
    ALTER DATABASE statement failed.
  • A:高可用系列RDS SQL Server实例涉及数据库镜像,所以ALTER数据库操作被禁止。若您业务紧急需继续执行本方案,可以先断开镜像,然后再重新设置SIMPLE模式:

    警告

    镜像关闭和恢复,以及数据库恢复模式的变更操作均为高危风险操作,请谨慎考虑后再操作。

    -- 先关闭镜像
    ALTER DATABASE [数据库名] SET PARTNER OFF;
    GO
    -- 设置数据库恢复模式为SIMPLE,数据库日志链会断开
    ALTER DATABASE [数据库名] SET RECOVERY SIMPLE;
    
    -- 镜像后续会自动恢复,无需您手动设置

相关文档