RDS SQL Server数据库实例进行日志备份时,出现The transaction log for database xx is full due to 'LOG_BACKUP'事务日志已满的报错,您可以参照本文进行操作,解决报错问题。

问题现象

RDS SQL Server数据库实例进行日志备份时,报The transaction log for database xx is full due to 'LOG_BACKUP'

问题原因

数据库实例空间已满,导致不能正常备份日志文件。

解决方案

  1. 查看实例的空间使用情况。
    1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
    2. 在左侧导航栏中,选择CloudDBA > 空间管理
    3. 空间管理页查看实例的各个空间使用情况。详细内容请参见空间管理
    4. TOP 10 数据库区域,查看tempdb数据库的大小。
      如果在TOP 10 数据库区域无法查询到tempdb数据库,请登录数据库并执行如下命令,查询tempdb数据库的大小。
      SELECT name AS FileName,
          size*1.0/128 AS FileSizeInMB,
          CASE max_size
              WHEN 0 THEN 'Autogrowth is off.'
              WHEN -1 THEN 'Autogrowth is on.'
              ELSE 'Log file grows to a maximum size of 2 TB.'
          END,
          growth AS 'GrowthValue',
          'GrowthIncrement' =
              CASE
                  WHEN growth = 0 THEN 'Size is fixed.'
                  WHEN growth > 0 AND is_percent_growth = 0
                      THEN 'Growth value is in 8-KB pages.'
                  ELSE 'Growth value is a percentage.'
              END
      FROM tempdb.sys.database_files;
      将查询到的FileSizeInMB值(单位为MB)求和,即可得到tempdb数据库的总空间。
  2. 执行如下操作,收缩事务日志。
    • 如果tempdb数据库总空间大于等于5 GB,且可以重启数据库实例:
      1. 重启数据库实例,具体操作请参见重启实例
      2. 在目标实例控制台左侧导航栏中,单击备份恢复
      3. 备份恢复页单击收缩事务日志
      4. 在弹出的对话框中单击确定
    • 如果tempdb数据库总空间小于5 GB,或没有条件重启数据库实例:
      基础版实例,请登录数据库执行如下SQL语句:
      说明tempdb数据库总空间小于5 GB时,收缩事务日志需要按命令截断日志链收缩;此操作会影响备份恢复到这个时间点,但不影响业务,操作前请先备份数据库。
      1. 执行以下SQL语句,将数据库设为简单模式,日志文件会自动断开。
        alter database <数据库名> set recovery simple
        说明 请忽略Login User <用户名> can't change database <数据库名> recovery model.的报错。
      2. 执行以下SQL语句,查看并收缩日志文件。
        use <数据库名>
        dbcc shrinkfile('<数据库名>_log')
      3. 执行以下SQL语句,恢复数据库模式。
        alter database <数据库名> set recovery full
  3. (可选)优化实例日志空间。
    • 事务日志增长过快的根本原因是事务较多或者有大事务。例如,一个事务中操作了500万行数据,在有这种大事务的情况下,建议您将事务拆分,每个事务操作10万行数据,分50次执行。
    • 升级实例的存储空间,具体操作请参见变更配置