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次执行。
- 升级实例的存储空间,具体操作请参见变更配置。