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'
。
问题原因
数据库实例空间已满,导致不能正常备份日志文件。
解决方案
查看实例的空间使用情况。
访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
在左侧导航栏中,选择自治服务 > 空间管理。
在空间管理页查看实例的各个空间使用情况。详细内容请参见空间管理。
在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数据库的总空间。
执行如下操作,收缩事务日志。
如果tempdb数据库总空间大于等于5 GB,且可以重启数据库实例:
重启数据库实例,具体操作请参见重启实例。
在目标实例控制台左侧导航栏中,单击备份恢复。
在备份恢复页单击备份并收缩事务日志。
在弹出的对话框中单击确定。
如果tempdb数据库总空间小于5 GB,或没有条件重启数据库实例:
基础系列实例,请登录数据库执行如下SQL语句:
说明当tempdb数据库总空间小于5 GB时,收缩事务日志需要按命令截断日志链收缩;此操作会影响备份恢复到这个时间点,但不影响业务,操作前请先备份数据库。
执行以下SQL语句,将数据库设为简单模式,日志文件会自动断开。
alter database <数据库名> set recovery simple
说明请忽略
Login User <用户名> can't change database <数据库名> recovery model.
的报错。执行以下SQL语句,查看并收缩日志文件。
use <数据库名> dbcc shrinkfile('<数据库名>_log')
执行以下SQL语句,恢复数据库模式。
alter database <数据库名> set recovery full
(可选)优化实例日志空间。
事务日志增长过快的根本原因是事务较多或者有大事务。例如,一个事务中操作了500万行数据,在有这种大事务的情况下,建议您将事务拆分,每个事务操作10万行数据,分50次执行。
升级实例的存储空间,具体操作请参见变更配置。