解决错误 3313、3314、3414 或 3456 (SQL Server)
在 SQL Server 数据库上执行重做、撤消或恢复操作期间发生的错误会将该数据库置于 SUSPECT 状态。此类错误包括 3313(日志重做错误)、3314(日志撤消错误)、3414(阻止数据库重新启动的恢复错误)和错误 3456(针对记入日志的事务的重做错误)。
解释
重做、撤消或恢复错误会将数据库置于 SUSPECT 状态,因为主要文件组(以及可能的其他文件组)是可疑的并且可能已损坏。数据库不可用,并且需要用户操作来解决问题。
![]() |
---|
如果对于 tempdb 发生此错误,则 SQL Server 实例将关闭。 |
用户操作
重做、撤消或恢复错误可能是由临时性条件导致的,也可能是由于您每次尝试启动数据库时发生的永久性错误导致的。
![]() |
---|
当遇到这些错误状况的任何一个时,SQL Server 通常在 SQL Server LOG 文件夹中生成三个文件。SQLDumpnnnn.txt 文件包含与故障相关的高级诊断信息,包括有关事务的详细信息和遇到问题的页面。此信息通常由产品支持小组用来分析故障的原因。 |
有关所发生的错误 3313、3314、3414 或 3456 的原因的信息,请检查 Windows 事件日志以了解有关指示特定故障的先前错误。相应的用户操作取决于 Windows 事件日志中的信息指示 SQL Server 错误是由临时性条件导致的,还是由永久性错误导致的。
对于临时性条件:
通过执行以下 ALTER DATABASETransact-SQL 语句,尝试使数据库联机:
ALTER DATABASE <database name> SET ONLINE;
为了确定恢复是否成功完成以及数据库是否已联机,请查看 SQL Server 错误日志和 sys.databases 目录视图。
如果数据库已联机,则执行 DBCC CHECKDBTransact-SQL 语句以验证数据库是否一致。
对于永久性错误:
在 SQL Server 错误日志中查看您正予以解决的错误(3313、3314、3414 或 3356),并且检查此错误之前的消息,以确定您是否可以手动纠正它们。如果您可以纠正更早的错误,则执行以下过程之一:
还原和验证数据库(建议的过程),如下所示:
尝试执行结尾日志备份。
使用 RESTORE …WITH NORECOVERY Transact-SQL 语句从完整数据库备份还原数据库,并且可以选择后跟差异数据库备份。
如果数据库使用完全恢复模型,则使用 RESTORE LOG … WITH NORECOVERY 应用在将完全、差异备份还原到故障点之后执行的所有事务日志备份。
当您将数据库还原到尽可能接近故障点时,通过使用 RESTORE DATABASE <数据库名称> WITH RECOVERY 恢复数据库。
在数据库联机后,运行 DBCC CHECKDBTransact-SQL 语句以验证数据库是否一致。
通过使用在本节前面介绍的针对临时性错误的步骤,尝试使数据库联机。
使用紧急模式,如下所示:
通过执行以下 ALTER DATABASETransact-SQL 语句,将数据库转换到 EMERGENCY 状态:
ALTER DATABASE <database_name> SET EMERGENCY;
检查 ALTER DATABASE 语句和 SQL Server 错误日志的输出。
在 sys.databases 目录视图中检查数据库的状态。
使用 DBCC CHECKDB 语句针对数据库执行一致性检查,以了解损坏的性质和程度。
在评估来自 DBCC CHECKDB 的输出时,可以选择使用 REPAIR_ALLOW_DATA_LOSS 选项执行 DBCC CHECKDB。
注意
在使用此选项之前,在 SQL Server 联机丛书的 DBCC CHECKDB (Transact-SQL) 主题中仔细检查有关在数据库紧急模式下解决错误的信息。
![]() |
---|
有关应对与错误 3313、3314、3414 或 3356 相关的硬件问题的信息,请参阅 MSSQLSERVER_824。 |
避免此错误的步骤
为了避免再次遇到这种情况,请执行以下操作:
检查 SQL Server 错误日志和 Windows 事件日志,以了解可能导致此错误的任何系统范围的问题。
若要排除产品中导致此状况的任何已知问题,请应用您的 SQL Server 版本的最新累积更新。