症状
当您在 Microsoft SQL Server 2008、SQL Server 2008 R2、SQL Server 2012 或 SQL Server 2014 中查询二进制大型对象(BLOB)列数据时,可能会收到以下错误:
错误:5180无法在数据库 "tempdb" 中打开无效文件 ID 0 的文件控制银行(FCB)。 验证文件位置。 执行 DBCC CHECKDB。
原因
出现此问题的原因是,当 SQL Server 读取 BLOB 数据时,它不会相应地处理(取消)消息。 仅当内部内存中的 BLOB 缓存已禁用时,才会出现此问题。 当缓存被禁用时,缓存数据将切换到数据库 tempdb。 此后,SQL Server 从数据库 tempdb (而不是内存缓存)读取 BLOB 数据。 取决于 BLOB 数据大小或服务器内存条件,禁用内部内存中的 BLOB 缓存。
解决方案
在 SQL Server 的以下累积更新中,此问题首先已修复。
SQL Server 2012 SP2 的累积更新2 /en-us/help/2983175
SQL Server 2012 SP1 的累积更新11 /en-us/help/2975396
SQL Server 2008 R2 SP2 的累积更新13 /en-us/help/2967540
SQL Server 2014 的累积更新2 /en-us/help/2967546
SQL Server 2008 SP3 的累积更新17 /en-us/help/2958696
SQL Server 的每个新的累积更新均包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 查看 SQL Server 的最新累积更新:
状态
Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。