文件句柄用于发现访问 SQL Server 2008 事务中时,交易记录可能会随机失败提交在 Windows Server 2003 中或在 Windows XP 专业 x64 版

文章翻译 文章翻译
文章编号: 955280 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

症状

在计算机上正在运行 Windows Server 2003 或 Windows XP 专业 x64 版使用 OpenSqlFilestream API 或.net SqlFilestream 类获取文件的句柄的发现访问 Microsoft SQL Server 2008,交易记录在事务中时可能会随机提交失败。出现此问题时, SQL Server 错误日志文件中记录以下错误之一:
  • 3910 (使用由另一个会话中的事务上下文)
  • 3981 (事务操作无法执行,因为有挂起的请求处理此事务)
  • 3922 (不能登记在事务中,因为事务不存在)
导致此问题的原因与 SQL Server 2008 中的 FILESTREAM 功能。但是,您当 SQL Server 2008 中使用 FILESTREAM 功能通常遇到此问题。

原因

出现此问题是由于在服务器服务时出错。服务器服务未正确关闭文件的延迟处理。因此,SQL Server 2008 不能执行提交操作。

解决方案

修补程序信息

Windows 2003 Server

现在可以从 Microsoft 获得支持的修补程序。但是,它被用于解决本文中介绍的此问题。它仅应用于出现这一特定问题的系统。此修补程序可能还会接受进一步的测试。因此,如果此问题没有对您造成严重的影响,我们建议您等待包含此修补程序的下一个软件更新。

要立即解决此问题,请联系 Microsoft 客户支持服务以获取此修复程序。有关 Microsoft 客户支持服务电话号码和关于支持费用的信息的完整列表,请访问下面的 Microsoft 网站:
http://support.microsoft.com/contactus/?ws=support
注意 在特殊的情况中如果 Microsoft 支持专业人员确定某个特定更新才能解决您的问题,可能会被取消通常会导致支持电话的费用。将正常收取支持费用将应用于其他支持问题和不需要进行专门更新的问题。
系统必备组件
若要将此修补程序必须运行 Windows Server 2003 Service Pack 1、 Windows Server 2003 Service Pack 2、 Windows XP 专业 x64 版或 Windows XP 专业 x64 版 Service Pack 2 计算机上。
重新启动要求
您必须在应用此修补程序后,重新启动计算机。
修补程序替换信息
此修补程序不替代以前发布的修补程序。
文件信息
此修补程序的英文版具有的文件属性 (或更新的文件属性) 在下表中列出。日期和时间对这些文件列出在协调世界时 (UTC)。当您查看文件信息时,将转换为本地时间。若要 UTC 与本地时间之间的时差使用控制面板中的 日期和时间 项中的 时区 选项卡。

Windows Server 2003 与 Service Pack 1、 x 基于 x86 的版本
收起该表格展开该表格
文件的名称文件版本文件大小日期时间平台
Srv.sys5.2.3790.3177361,4722008 年七月 18 日10: 15x86

Windows Server 2003 与 Service Pack 1 ,x64 -基于版本
收起该表格展开该表格
文件的名称文件版本文件大小日期时间平台
Srv.sys5.2.3790.3177674,8162008 年七月 21 日07: 32x64
Windows Server 2003 与 Service Pack 1,基于 Itanium 的版本
收起该表格展开该表格
文件的名称文件版本文件大小日期时间平台
Srv.sys5.2.3790.31771,110,5282008 年七月 21 日07: 32IA 64

与 Service Pack 2 的 Windows Server 2003、 x 基于 x86 的版本
收起该表格展开该表格
文件的名称文件版本文件大小日期时间平台
Srv.sys5.2.3790.4337358,4002008 年七月 18 日12: 04x86

与 Service Pack 2 的 Windows Server 2003、 x 基于 x64 的版本
收起该表格展开该表格
文件的名称文件版本文件大小日期时间平台
Srv.sys5.2.3790.4337648,1922008 年七月 21 日14: 57x64

Windows Server 2003 与 Service Pack 2,基于 Itanium 的版本
收起该表格展开该表格
文件的名称文件版本文件大小日期时间平台
Srv.sys5.2.3790.43371,111,5522008 年七月 21 日14: 54IA 64

Windows XP 专业 x64 版

现在可以从 Microsoft 获得支持的修补程序。但是,它被用于解决本文中介绍的此问题。它仅应用于出现这一特定问题的系统。此修补程序可能还会接受进一步的测试。因此,如果此问题没有对您造成严重的影响,我们建议您等待包含此修补程序的下一个软件更新。

要立即解决此问题,请联系 Microsoft 客户支持服务以获取此修复程序。有关 Microsoft 客户支持服务电话号码和关于支持费用的信息的完整列表,请访问下面的 Microsoft 网站:
http://support.microsoft.com/contactus/?ws=support
注意 在特殊的情况中如果 Microsoft 支持专业人员确定某个特定更新才能解决您的问题,可能会被取消通常会导致支持电话的费用。将正常收取支持费用将应用于其他支持问题和不需要进行专门更新的问题。
系统必备组件
若要将此修补程序必须运行 Windows XP 专业 x64 版或 Windows XP 专业 x64 版 Service Pack 2 计算机上。
重新启动要求
您必须在应用此修补程序后,重新启动计算机。
修补程序替换信息
此修补程序不替代以前发布的修补程序。
文件信息
此修补程序的英文版具有的文件属性 (或更新的文件属性) 在下表中列出。日期和时间对这些文件列出在协调世界时 (UTC)。当您查看文件信息时,将转换为本地时间。若要 UTC 与本地时间之间的时差使用控制面板中的 日期和时间 项中的 时区 选项卡。

Windows XP 专业 x64 版
收起该表格展开该表格
文件的名称文件版本文件大小日期时间平台
Srv.sys5.2.3790.3177674,8162008 年七月 21 日07: 32x64

与 Service Pack 2 的 Windows XP 专业 x64 版
收起该表格展开该表格
文件的名称文件版本文件大小日期时间平台
Srv.sys5.2.3790.4337648,1922008 年七月 21 日14: 57x64

替代方法

重要此分区、 方法,或任务包含告诉您如何修改注册表的步骤。但是,如果注册表修改不当可能会出现严重问题。因此,请确保您仔细按照这些步骤。附加的保护注册表之前先备份您对其进行修改。然后,您可以在出现问题时还原注册表。有关如何备份和还原注册表的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
322756如何备份和还原在 Windows 注册表
警告当您在系统中共享文件时,此替代方法将导致性能问题。


若要变通解决此问题,将 Cachedopenlimit 注册表项的值设置为 0,然后重新启动服务器服务。若要这样做,请按照下列步骤操作:
  1. 在注册表编辑器中找到以下注册表子项:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Lanmanserver\Parameters
  2. 参数 的注册表子项下单击 编辑、 单击 新建、 单击 DWORD 值,键入 Cachedopenlimit,然后按 ENTER 键。
  3. 将十进制 Cachedopenlimit 注册表项的值设置为 0
  4. 重新启动服务器服务。
注意默认状态下,Cachedopenlimit 注册表项的值是 5,即使您未设置它。

警告时将值设置为 0,文件句柄的所有共享的文件不会缓存由系统中。当您在系统中访问共享的文件时,这可能会导致性能问题。

状态

Microsoft 已经确认这是在"适用于"一节中列出的 Microsoft 产品中的问题。

更多信息

此问题也会在 Windows Server 2008 中和在 Windows XP 中发生 x 基于 x86 的版本。有关 Windows Server 2008 中的此问题的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
953263当您使用 TRANSACT-SQL 语句运行在 SQL Server 2008 年 FILESTREAM 列上时,语句可能会随机失败提交并导致数据损坏,Windows Server 2008 中
有关在 Windows XP 中 x 基于 x86 的版本,此问题的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
955567当您试图将数据追加到 FILESTREAM varbinary (最大值) 中的列 SQL Server 2008 基于 Windows XP 的计算机上时,可能会发生数据损坏
有关软件更新术语的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:-
824684用于描述 Microsoft 软件更新的标准术语的说明

何时使用 FILESTREAM 存储

SQL Server 2008 中的二进制大型对象 (BLOB) 数据可以是 VARBINARY(MAX) 类型将数据存储在数据库表中的数据。BLOB 数据也可以是文件系统中存储数据的 VARBINARY(MAX) FILESTREAM 类型的数据。数据大小和数据使用情况决定了是否应使用数据库存储或 $ FILESTREAM 存储。您应考虑使用 FILESTREAM 存储,当满足下列条件都为真时:
  • 在平均的来说 BLOB 数据存储的大于 1 兆字节 (MB)。
  • 快速-读取访问权限是非常重要的。
  • 您正在开发的应用程序逻辑使用中间层的应用程序。
如果 BLOB 数据为不超过 1 MB,您应考虑使用数据库存储。数据库存储经常可提供更好地流的性能。

有关详细的信息,请访问下面的 Microsoft 开发人员网络 (MSDN) 的网站:
http://msdn.microsoft.com/en-us/library/bb933993.aspx

属性

文章编号: 955280 - 最后修改: 2009年1月13日 - 修订: 2.0
这篇文章中的信息适用于:
  • Microsoft Windows Server 2003 Web Edition
  • Microsoft Windows Server 2003 Datacenter Edition
  • Microsoft Windows Server 2003, Datacenter Edition for Itanium-Based Systems
  • Microsoft Windows Server 2003, Datacenter x64 Edition
  • Microsoft Windows Server 2003, Enterprise x64 Edition
  • Microsoft Windows Server 2003 Enterprise Edition
  • Microsoft Windows Server 2003, Enterprise Edition for Itanium-based Systems
  • Microsoft Windows Server 2003, Standard x64 Edition
  • Microsoft Windows Server 2003 Standard Edition
  • Microsoft Windows XP Professional x64 Edition
关键字:?
kbmt kbexpertiseadvanced kbfix kbautohotfix kbsurveynew kbqfe kbhotfixserver KB955280 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 955280
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com