背景: 程序异常中断TCPProvider, error: 0 - An existing connection was forcibly closed by the remotehost.,手工执行查询没有问题,不过执行时间要几十秒。Trace程序的执行,发现要数十分钟,经了解,原因在于程序使用了SqlDataReader读取数据,并且在
背景:
程序异常中断“TCPProvider, error: 0 - An existing connection was forcibly closed by the remotehost.”,手工执行查询没有问题,不过执行时间要几十秒。Trace程序的执行,发现要数十分钟,经了解,原因在于程序使用了SqlDataReader读取数据,并且在读取的过程中进行了一系列数据处理,导致整个完成过程时间变得很长。由此怀疑是网络不稳定之类的因素导致处理过程中连接中断,协调之后改为DataTable做一次性数据加载,程序调整之后,出现故障的频繁大大降低,但无法完全杜绝。
进一步检查,发现在SQLServer日志中,有如下错误:
Error: 7884, Severity:20, State: 1. (Params:). The error is printed in terse mode because there waserror during formatting. Tracing, ETW, notifications etc are skipped.
这个错误与sys.messages中的标准描述不一样,在网上搜索没有找到合适的解决方案。
排查:
把查询的表专门导到一台服务器做测试,最终发现与一个nvarchar(max)列有关,随后想起在不久前,因为Logreader出问题,把出问题的数据列从ntext改为nvarchar(max),于是专门测试这个修改,最终确定问题是这个修改导致。
(text/ntext列可能会导致logreaderagent出问题,这个遇到多次了,但没有明确的重现故障的方法,所以不讨论这个)
故障重现:
使用下面的T-SQL创建测试表,数据,并修改ntext列为nvarchar(max)
-- ====================================== ================ -- 创建测试表 -- ====================================================== USE tempdb; GO IF OBJECT_ID(N'dbo.tb_test', 'U') IS NOT NULL DROPTABLE dbo.tb_test; GO CREATE TABLEdbo.tb_test( id intIDENTITY PRIMARYKEY, Code varchar(50), Datedatetime, Value ntext ); GO INSERT dbo.tb_test SELECT TOP(10000) Code =RIGHT(10000000000 +ABS(CHECKSUM(NEWID())) % (1000 * 2 ), 20), Date= DATEADD(DAY, CHECKSUM(NEWID()) % 100 , GETDATE() ), Value =CONVERT(char(36), NEWID() ) FROM sys.all_columns A WITH(NOLOCK) ,sys.all_columns B WITH(NOLOCK) ; GO -- ====================================================== -- 修改 ntext 字段类型为 nvarchar(max) -- ====================================================== ALTER TABLEdbo.tb_test ALTERCOLUMN Value nvarchar(max); GO 编写程序,查询数据,并且在查询完成前更改数据,这里用 PowherShell 做测试 # 连接字符串 $ConnectionString = "Data Source=127.0.0.1;InitialCatalog=tempdb;Integrated Security=SSPI" # 打开连接 $SqlCnnectionQuery = New-Object System.Data.SqlClient.SqlConnection -ArgumentList $ConnectionString $SqlCnnectionQuery.Open() # 查询数据 $SqlCommandQuery = New-Object System.Data.SQLClient.SQLCommand $SqlCommandQuery.Connection = $SqlCnnectionQuery $SqlCommandQuery.CommandText = "SELECT * FROM( SELECT value, row_id = ROW_NUMBER()OVER( PARTITION BY Code ORDER BY date DESC) FROM dbo.tb_test WITH(NOLOCK) )DATAWHERE row_id = 1" $SqlReader = $SqlCommandQuery.ExecuteReader() # 修改数据 $SqlCnnectionUpdate = New-Object System.Data.SqlClient.SqlConnection -ArgumentList $ConnectionString $SqlCnnectionUpdate.Open() $SqlCommandUpdate = New-Object System.Data.SQLClient.SQLCommand $SqlCommandUpdate.Connection = $SqlCnnectionUpdate $SqlCommandUpdate.CommandText = "UPDATE top(1000) dbo.tb_test SET Value =CONVERT(char(36), NEWID() ) WHERE id IN( SELECT TOP 1000 id FROM dbo.tb_testORDER BY id DESC )" $UpdateRows = $SqlCommandUpdate.ExecuteNonQuery() $SqlCnnectionUpdate.Close() "Update $UpdateRows rows." #读取查询数据 #读取过程中会出现错误 # (SQL 2008 R2 SP2): TCP Provider, error: 0 - Anexisting connection was forcibly closed by the remote host. # (SQL 2008 R2 SP3): TCP Provider, error: 0 - The specifiednetwork name is no longer available. At line:1 char:22 "Read query data...." $ReadRows=0 While($SqlReader.Read()) {$ReadRows+=1} "Read $ReadRows rows." # 关闭连接 $SqlReader.Close() $SqlCnnectionQuery.Close()
故障处理:
对于修改了数据类型的列,将数据重新更新就可以解决 问题(UPDATE 表 SET 修改的列=修改的列)
这个问题测试了 SQL Server2008 到 2014,都存在问题。其中 SQL Server 2008 R2 SP3中测试,SQL Server日志中的错误信息有所不同,是:
Error: 7886, Severity: 20, State: 2.
A read operation on a large object failedwhile sending data to the client. A common cause for this is if the applicationis running in READ UNCOMMITTED isolation level. This connection will beterminated.

PHP作为一种流行的Web开发语言,已经被使用了很长时间。PHP中集成的PDO(PHP数据对象)类是我们在开发Web应用程序过程中与数据库进行交互的一种常用方法。但是,一些PHP开发者经常遇到的问题是,当使用PDO类与数据库进行交互时,他们会收到这样的错误:PHPFatalerror:CalltoundefinedmethodPDO::prep

在Vue应用中使用axios是十分常见的,axios是一种基于Promise的HTTP客户端,可以用于浏览器和Node.js。在开发过程中,有时会出现“Uncaught(inpromise)Error:Requestfailedwithstatuscode500”的错误提示,对于开发者来说,这个错误提示可能有些难以理解和解决。本文将会探讨这

解决C++代码中出现的“error:incompletetypeisnotallowed”问题在C++的编程过程中,有时候会遇到一些编译错误,其中一个常见的错误是“error:incompletetypeisnotallowed”。这个错误通常是由于在使用不完整的类型进行操作时引起的。本文将介绍这个错误的原因,并提供几种解决方法。首先,我

“0271:real time clock error”开不开机的解决办法:1、按一下F1,在出现的界面中,将选项栏转到第三项“Date/Time”;2、将系统时间手动修改成现在的时间;3、按F10,在弹出的对话框中,选择yes;4、重新打开笔记本即可正常开机。

Onenote是Microsoft提供的最好的笔记工具之一。结合Outlook和MSTeams,Onenote可以成为提高工作和个人创意工作效率的强大组合。我们必须以不同的格式做笔记,这可能不仅仅是把事情写下来。有时我们需要从不同来源复制图像并在日常工作中进行一些编辑。如果知道如何应用更改,则粘贴在Onenote上的图像可以发挥很大作用。您在使用Onenote时是否遇到过粘贴在Onenote上的图像无法让您轻松工作的问题?本文将着眼于在Onenote上有效地使用图像。我们可

解决C++代码中出现的“error:expectedinitializerbefore'datatype'”问题在C++编程中,有时候我们在编写代码时会遇到一些编译错误,其中一种常见的错误是“error:expectedinitializerbefore'datatype'”。这个错误通常在变量声明或函数定义中发生,可能导致程序无法正确编译或

如何解决PHPWarning:fopen():failedtoopenstream:Nosuchfileordirectory在使用PHP开发过程中,我们经常会遇到一些文件操作的问题,其中之一就是"PHPWarning:fopen():failedtoopenstream:Nosuchfileordirectory

在使用PHP编写Web应用程序时,经常会使用MySQL数据库来存储数据。PHP提供了一种与MySQL数据库进行交互的方法,称为MySQLi。然而,有时在使用MySQLi时,会遇到一个错误信息,如以下所示:PHPFatalerror:Calltoundefinedfunctionmysqli_connect()这个错误信息意味着PHP无法找到my


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。
