执行SQL语句时,我有时会遇到错误
客户:
“执行Transact-SQL语句时发生异常或 批量。接收结果时发生传输级错误 从服务器。 (提供者:TCP提供者,错误:0 - 信号量 超时期限已过期)“
SQL Server:
“2014-02-09 11:02:31.81服务器发生了致命错误 从网络中读取输入流。会议将是 终止(输入错误:64,输出错误:0)。“
我已经设法从我生成的数据库脚本中找到了一致失败的一段SQL,我在部署新版本时运行该脚本(虽然我也在其他地方间歇性地看到错误):
/*************************************************/
/* [dbo].gspFolderDataCache_SEARCH */
/*************************************************/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].gspFolderDataCache_SEARCH') AND type in (N'P', N'PC')) DROP PROCEDURE [dbo].gspFolderDataCache_SEARCH
GO
CREATE PROCEDURE [dbo].gspFolderDataCache_SEARCH (@FolderId AS [uniqueidentifier], @PerformanceFolderId AS [uniqueidentifier], @ShowFolderId AS [uniqueidentifier], @SpaceFolderId AS [uniqueidentifier], @VenueFolderId AS [uniqueidentifier])
AS
SELECT
FolderId, PerformanceFolderId, ShowFolderId, SpaceFolderId, VenueFolderId
FROM
[dbo].[FolderDataCache]
WHERE
([FolderId] = @FolderId OR @FolderId IS NULL)
AND ([PerformanceFolderId] = @PerformanceFolderId OR @PerformanceFolderId IS NULL)
AND ([ShowFolderId] = @ShowFolderId OR @ShowFolderId IS NULL)
AND ([SpaceFolderId] = @SpaceFolderId OR @SpaceFolderId IS NULL)
AND ([VenueFolderId] = @VenueFolderId OR @VenueFolderId IS NULL)
GO
虽然这个几乎相同的脚本每次都有效:
/*************************************************/
/* [dbo].gspDiscounts_SEARCH */
/*************************************************/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].gspDiscounts_SEARCH') AND type in (N'P', N'PC')) DROP PROCEDURE [dbo].gspDiscounts_SEARCH
GO
CREATE PROCEDURE [dbo].gspDiscounts_SEARCH (@DiscountId AS [uniqueidentifier], @DiscountName AS [nvarchar](50), @DiscountDescription AS [nvarchar](max))
AS
SELECT
DiscountId, DiscountName, DiscountDescription
FROM
[dbo].[Discounts]
WHERE
([DiscountId] = @DiscountId OR @DiscountId IS NULL)
AND ([DiscountName] LIKE @DiscountName OR @DiscountName IS NULL)
AND ([DiscountDescription] LIKE @DiscountDescription OR @DiscountDescription IS NULL)
GO
在此特定示例中,我的数据库维护工具正在执行SQL,我使用SQL Server管理对象来运行脚本,但在使用企业库数据访问块的主应用程序中发生相同的错误,所以我认为它不在C#代码中。
SQL Server(SQL Server v2008 R2)和客户端都位于同一VPC内的Amazon EC2服务器上。当Web服务器位于VPC之外并运行Windows Server 2008时,不会发生此问题。两台服务器现在都在Windows Server 2012上
因为失败的语句与有效的语句非常相似,并且因为它在客户端和服务器上都显示为网络错误,所以我认为它可能介于两者之间......我已经转向了Windows两台服务器上的防火墙关闭这没有帮助。
到底是怎么回事?
答案 0 :(得分:0)
“你有没有尝试过再打开它?”
不是我第一次使用生产服务器,但现在在午夜过了25分钟,我可以确认(通过应用所有挂起的Windows更新)似乎已经解决了问题。
Tch的。
答案 1 :(得分:0)
看起来像是两件事的组合:
到目前为止,设置较低的MTU并启用IMCP似乎已经修复了它。