本文主要从以下两种情况介绍RDS SQL Server收缩事务日志的具体操作。
阿里云提醒您:
如果您对实例或数据有修改、变更等风险操作,请务必注意实例的容灾、容错能力,确保数据安全。
如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。
日志空间充足
如果日志空间充足,可以通过RDS控制台备份并收缩事务日志功能来处理,该功能是指系统将自动通过执行日志备份和日志收缩操作来管理和优化事务日志文件的大小。
访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
在左侧导航栏单击备份恢复。
单击备份并收缩事务日志,单击确定。
重要在进行收缩事务日志操作时,系统会自动执行一次日志备份。备份的目的是为了归档事务日志以便本地日志有更高的概率清理成功。
建议在进行收缩事务日志操作前,先检查数据库的日志重用等待状态。
当状态为NOTHING时,可以尝试进行收缩,但收缩的大小取决于事务日志尾部可重用的VLF大小。如果存在活动事务导致尾部VLF状态无法设置为可重用,可能需要再次进行日志备份,并等待当前活动事务完成后,重新检查重用等待状态,直到状态为NOTHING为止。
当状态为LOG_BACKUP时,可能会由于存在活动事务,并不一定收缩成功,收缩操作可能需要多次执行才能成功。
您可前往数据库管理 > 查看详情页面查看日志文件重用状态(log_reuse_wait_desc)。具体操作,请参见查看数据库属性。
日志空间不足
以下操作仅适用于紧急状态下进行,一般建议您先扩容磁盘。
如果您的数据库服务器提示“事务日志已满”,此时无法通过控制台收缩事务日志,需要您手动执行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.
相关文档
如何扩容存储空间,请参见变更配置。
如何通过SQL命令管理数据库,请参见SQL命令管理数据库。
如需解决数据库的磁盘空间被占满的情况,请参见SQL Server磁盘空间占满。