操作系统返回错误665(由于文件系统限制,请求的操作无法完成)

Jef*_*f A 11 sql-server dbcc-checkdb sql-server-2014

有一个在 Windows 2012 R2 上运行的 SQL Server 2014 实例,每周运行 Ola Hallengren 的数据库完整性脚本,最近两周开始出现此错误:

DESCRIPTION:    The operating system returned error 665(The requested operation could 
not be completed due to a file system limitation) to SQL Server during a write at 
offset 0x000036ec240000 in file 'E:\DBFiles\XXXXX.mdf_MSSQL_DBCC42'. Additional 
messages in the SQL Server error log and system event log may provide more detail. This 
is a severe system-level error condition that threatens database integrity and must be 
corrected immediately. Complete a full database consistency check (DBCC CHECKDB). This 
error can be caused by many factors; for more information, see SQL Server Books Online.
Run Code Online (Sandbox Code Playgroud)

我检查了事件日志和 SQL Server 错误日志,但没有得到很多有用的附加信息。我正在DBCC像上周一样重新运行这个数据库的检查,它清除了 MSSQL_DBCC42 文件并且没有发现任何损坏。

除了事件日志和 SQL Server 错误日志之外,还有其他地方我可以找到更多信息吗?我是否应该询问我们的存储组,看看 SAN 的报告中是否显示了某些内容,还是由于某些争用,这纯粹是 SQL 相关的?

这个数据库非常活跃,因为它在 iSeries 上复制了来自我们 JDE 财务和制造环境的交易,目前大约 300GB。每天晚上,数据库都会备份并恢复到开发服务器。对我DBCC的数据库副本进行检查会更好吗?该数据库是为前一天报告构建 SSAS 多维多维数据集的来源,因此我可以选择完全重建数据或尝试从备份中恢复(如果数据损坏等)。

感谢您对可能导致此错误的原因或DBCC checkdb根据情况运行的最佳选择的任何想法。

Sim*_*rts 11

DBCC 在内部使用快照。然后在 Windows 中将快照实现为稀疏文件。

所以这实际上是 Windows 处理稀疏文件的一个问题,这导致 DBCC 使用的快照偶尔会在大型和非常活跃的数据库上中断。它在http://support.microsoft.com/kb/2002606 中有一些推荐的修复程序的合理记录

但是,如果您可以在开发服务器上使用 DBCC,我建议您改用它。(我个人只在 DBCC 'd/snapshotted 时仍在服务流量的数据库中看到了这个问题。备份/恢复到空闲服务器,DBCC => 没有更多的 665 错误。)

  • +1 尤其是针对备份的 DBCC,只要它确实是备份和还原,而不是 log ship/AG/mirror/repl。有关其他一些提示,请参阅 [我的这篇文章](http://sqlperformance.com/2012/11/io-subsystem/minimize-impact-of-checkdb) 和 [Paul Randal 的这篇文章](http://www .sqlskills.com/blogs/paul/post/CHECKDB-From-Every-Angle-Consistency-Checking-Options-for-a-VLDB.aspx)。在生产服务器的低容量期间偶尔使用 DBCC 也是一个好主意,因为它仍然可以在该硬件上找到永远不会出现在开发服务器上的物理问题。 (6认同)
  • ...当然为此,您可以使用`WITH PHYSICAL_ONLY` 来避免重复对开发服务器定期执行的所有逻辑检查。 (2认同)