【问题标题】:The transaction log for database 'databasename' is full.数据库 'databasename' 的事务日志已满。
【发布时间】:2012-11-16 17:20:00
【问题描述】:

数据库 '' 的事务日志已满。要找出日志中的空间不能被重用的原因,请参阅 sys.databases 中的 log_reuse_wait_desc 列。 请帮我解决这个问题。 提前致谢。

【问题讨论】:

标签: sql-server


【解决方案1】:

毫无疑问,您正在Full Recovery Mode 中运行数据库,并且未能进行事务日志备份。

在 SQL Server 管理器中右键单击您的数据库,然后检查“选项”页面。将恢复模式从Full 切换到Simple,然后再次右键单击数据库。选择TasksShrink、Files。将日志文件缩小到合适的大小(我一般坚持数据文件大小的 20-25%)。

切换回Full Recovery Model,并立即进行完整的数据库备份。

您现在需要确定是否需要能够将数据库恢复到某个时间点。如果是这样,请根据您的业务需求安排定期事务日志和差异备份。

如果企业可以承受一定数量的数据丢失,请安排完整备份并切换到Simple 模式。

【讨论】:

  • 在这个答案和@Steven 的答案之间,有一些很棒的信息!
【解决方案2】:

最可能的答案是您需要运行日志备份或者有一个打开的事务。

这里还有一点可以帮助你...

在您的服务器上运行此脚本:

-- last FULL backup
;with FULLBUs 
as (
    select d.name, max(b.backup_finish_date) as 'Last FULL Backup'
    from sys.databases d
        join msdb.dbo.backupset b
            on d.name = b.database_name
    where b.type = 'D'
    group by d.name
),

-- last LOG backup for FULL and BULK_LOGGED databases
LOGBUs
as (
    select d.name, max(b.backup_finish_date) as 'Last LOG Backup'
    from sys.databases d
        join msdb.dbo.backupset b
            on d.name = b.database_name
    where d.recovery_model_desc <> 'SIMPLE'
        and b.type = 'L'
    group by d.name
)

-- general overview of databases, recovery model, and what is filling the log, last FULL, last LOG
select d.name, d.state_desc, d.recovery_model_desc, d.log_reuse_wait_desc, f.[Last FULL Backup], l.[Last LOG Backup]
from sys.databases d
    left outer join FULLBUs f
        on d.name = f.name
    left outer join LOGBUs l
        on d.name = l.name
where d.name not in ('model', 'TempDB')
order by d.name

此查询将为您提供数据库的粗略概述、它们使用的恢复模式、日志已满的原因以及上次 FULL 和 LOG 备份的运行时间。

查看标记为 log_reuse_wait_description 的列。很可能它说 BACKUP。下一个最可能的原因是TRANSACTION。

如果是BACKUP,这里有一些信息:

基本上,对于您的 SIMPLE 数据库,每天运行一次完整备份。对于 FULL 数据库,每天运行一次 FULL 备份,每小时运行一次 LOG 备份。调整 LOG 数据库的频率,以匹配您在保住工作的同时丢失数据的能力。

管理备份的最简单方法是使用Ola Hallengren's maintenance scripts。访问他的网站并尝试使用它们。

如果您看到 TRANSACTION 是原因,请尝试运行:

dbcc opentran

并追踪拥有未结交易的人。

【讨论】:

  • 我的所有人在 log_reuse_wait_description 列中都说“NOTHING”或“CHECKPOINT”。
【解决方案3】:

如果您的数据库恢复模式已满且您没有日志备份维护计划,您将收到此错误,因为LOG_BACKUP 导致事务日志已满。

这将阻止您对该数据库执行任何操作,例如收缩,并且 SQL Server 数据库引擎将引发 9002 错误。

为了克服这种行为,我建议您查看The transaction log for database ‘SharePoint_Config’ is full due to LOG_BACKUP,其中显示了解决此问题的详细步骤,例如日志备份维护计划。

【讨论】:

【解决方案4】:

这样做 右键单击数据库节点->任务->备份->常规(在选项卡中)->将“备份类型”设置为“事务日志”->确定。

【讨论】:

    【解决方案5】:

    右键单击数据库\属性\文件。

    您将拥有一个包含数据库文件的表,其中有一个日志文件。只需将初始大小扩大到合理的数量即可。

    【讨论】:

      猜你喜欢
      • 2013-07-14
      • 2017-11-20
      • 2013-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      相关资源
      最近更新 更多