症状
假设你运行 DBCC CHECKDB 命令,该命令将在 sql server 2012 或 sql server 2014 中正在进行事务处理的数据库上创建暂时性快照或快照,并且由于外部错误(例如,i/o 错误),快照上的回滚恢复失败。 在这种情况下,将在 SQL Server 错误日志中记录以下错误消息,SQL Server 会意外关闭:
<时间戳> <SPID> <n> 在数据库 "<dbname>" 中前滚的事务(<id>)。 这只是一条信息性消息。 无需任何用户操作。 <> <SPID> 操作系统返回错误665(由于文件系统限制,无法在 "> 文件名 <" 的偏移 <偏移> 中完成所请求的操作)到 SQL Server。 SQL Server 错误日志和系统事件日志中的其他消息可能提供更多详细信息。 这是威胁数据库完整性的严重系统级错误情况,必须立即更正。 完成完整数据库一致性检查(DBCC CHECKDB)。 此错误可能由许多因素导致;有关详细信息,请参阅 SQL Server 联机丛书。 <时间戳> <SPID> 错误:3314,严重性:17,状态: 3. 在数据库 '> <dbname> ' 中撤消记录的操作期间 <时间戳 <SPID>,日志记录 ID (<aa: bb: cc>)处出现错误。 通常,特定的故障在 Windows 事件日志服务中记录为错误。 从备份中还原数据库或文件,或修复数据库。 <时间戳> <SPID> 错误:831,严重性:20,状态:1。 <时间戳> <SPID> 无法取消分配保留的页面。 <时间戳> <SPID> 错误:3449,严重性:21,状态:1。 <时间戳> <SPID> SQL Server 必须关闭才能恢复数据库(数据库 ID <dbid>)。 数据库或者是无法关闭的用户数据库或系统数据库。 重新启动 SQL Server。 如果数据库在另一次启动后恢复失败,请修复或还原数据库。 <时间戳> <SPID> 由于服务器关闭,SQL 跟踪已停止。 跟踪 ID = "1"。 这只是一条信息性消息;无需任何用户操作。 <时间戳> <SPID> 由于服务器关闭,SQL 跟踪已停止。 跟踪 ID = "2"。 这只是一条信息性消息;无需任何用户操作。 <时间戳> <SPID> 错误:17188,严重性:16,状态:1。
原因
出现此问题的原因是,当快照上的回滚恢复失败时,SQL Server 会尝试使受影响的数据库脱机处理错误。 但是,由于内部保留的闩锁,数据库无法脱机。 因此,SQL Server 服务已关闭。
解决方案
服务包信息
若要解决此问题,请获取 SQL Server 2014 的 Service Pack 1。
有关 SQL Server 2014 Service Pack 1 (SP1)的详细信息,请参阅 在 SQL server 2014 Service Pack 1 中修复的 bug。
累积更新信息
在 SQL Server 的以下累积更新中,此问题首先已修复。
SQL Server 的每个新的累积更新均包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 我们建议你下载并安装 SQL Server 的最新累积更新:
状态
Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。