Maison base de données tutoriel mysql Error:7884,Severity:20,State:1

Error:7884,Severity:20,State:1

Jun 07, 2016 pm 04:10 PM
error state 背景

背景: 程序异常中断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()
Copier après la connexion

故障处理:

对于修改了数据类型的列,将数据重新更新就可以解决 问题(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.

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Où trouver la courte de la grue à atomide atomique
1 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Solution à l'erreur fatale PHP : appel à la méthode non définie PDO::prepare() dans Solution à l'erreur fatale PHP : appel à la méthode non définie PDO::prepare() dans Jun 22, 2023 pm 06:40 PM

PHP est un langage de développement Web populaire utilisé depuis longtemps. La classe PDO (PHP Data Object) intégrée à PHP est un moyen courant pour nous d'interagir avec la base de données lors du développement d'applications Web. Cependant, un problème que certains développeurs PHP rencontrent souvent est que lorsqu'ils utilisent la classe PDO pour interagir avec la base de données, ils reçoivent une erreur comme celle-ci : PHPFatalerror:CalltoundefinedmethodPDO::prep

Que dois-je faire si « Erreur non interceptée (promise) : échec de la demande avec le code d'état 500 » se produit lors de l'utilisation d'axios dans une application Vue ? Que dois-je faire si « Erreur non interceptée (promise) : échec de la demande avec le code d'état 500 » se produit lors de l'utilisation d'axios dans une application Vue ? Jun 24, 2023 pm 05:33 PM

Il est très courant d'utiliser axios dans les applications Vue. axios est un client HTTP basé sur Promise qui peut être utilisé dans les navigateurs et Node.js. Pendant le processus de développement, le message d'erreur « Uncaught(inpromise)Error : Requestfailedwithstatuscode500 » apparaît parfois pour les développeurs, ce message d'erreur peut être difficile à comprendre et à résoudre. Cet article explorera ceci

Résoudre le problème de « erreur : le type incomplet n'est pas autorisé » dans le code C++ Résoudre le problème de « erreur : le type incomplet n'est pas autorisé » dans le code C++ Aug 26, 2023 pm 08:54 PM

Résolvez le problème « erreur : type incomplet n'est pas autorisé » dans le code C++. Au cours du processus de programmation C++, vous rencontrez parfois des erreurs de compilation. L'une des erreurs courantes est « erreur : type incomplet n'est pas autorisé ». Cette erreur est généralement provoquée par une opération sur un type incomplet. Cet article expliquera la cause de cette erreur et proposera plusieurs solutions. Tout d'abord, je

Comment définir une image comme arrière-plan dans OneNote Comment définir une image comme arrière-plan dans OneNote May 14, 2023 am 11:16 AM

Onenote est l'un des meilleurs outils de prise de notes proposés par Microsoft. Associé à Outlook et MSTeams, Onenote peut constituer une combinaison puissante pour améliorer le travail et la productivité créative personnelle. Nous devons prendre des notes dans un format différent, ce qui peut être plus que simplement écrire des choses. Parfois, nous devons copier des images de différentes sources et effectuer quelques retouches dans notre travail quotidien. Les images collées sur Onenote peuvent être très utiles si vous savez comment appliquer les modifications. Avez-vous déjà rencontré un problème lors de l'utilisation de Onenote : les images collées sur Onenote ne vous permettent pas de travailler facilement ? Cet article examinera l'utilisation efficace des images sur Onenote. nous pouvons

0271 : Que dois-je faire si l'ordinateur ne peut pas être allumé en raison d'une erreur d'horloge en temps réel ? 0271 : Que dois-je faire si l'ordinateur ne peut pas être allumé en raison d'une erreur d'horloge en temps réel ? Mar 13, 2023 am 11:30 AM

Solution à « 0271 : erreur d'horloge en temps réel » qui ne peut pas démarrer : 1. Appuyez sur F1 et dans l'interface qui apparaît, déplacez la barre d'options jusqu'au troisième élément « Date/Heure » 2. Modifiez manuellement l'heure du système à l'heure actuelle ; une fois ; 3. Appuyez sur F10 et sélectionnez oui dans la boîte de dialogue contextuelle ; 4. Rouvrez le portable pour démarrer normalement.

Résoudre le problème « erreur : initialiseur attendu avant le type de données » dans le code C++ Résoudre le problème « erreur : initialiseur attendu avant le type de données » dans le code C++ Aug 25, 2023 pm 01:24 PM

Résolvez le problème « erreur : initialiseur attendu avant le type de données » dans le code C++. Dans la programmation C++, nous rencontrons parfois des erreurs de compilation lors de l'écriture du code. L'une des erreurs courantes est « erreur : initialiseur attendu avant le type de données ». Cette erreur se produit généralement dans une déclaration de variable ou une définition de fonction et peut empêcher le programme de se compiler correctement ou

Comment résoudre PHP Avertissement : fopen() : échec d'ouverture du flux : aucun fichier ou répertoire de ce type Comment résoudre PHP Avertissement : fopen() : échec d'ouverture du flux : aucun fichier ou répertoire de ce type Aug 19, 2023 am 10:44 AM

Comment résoudre PHPWarning:fopen():failedtoopenstream:Nosuchfileordirectory Dans le processus d'utilisation du développement PHP, nous rencontrons souvent des problèmes de fonctionnement des fichiers, dont "PHPWarning:fopen():failedtoopenstream:Nosuchfileordirectory"

Nouvelle version Win11 du dessin : supprimez l'arrière-plan en un seul clic pour réaliser la fonction de découpe Nouvelle version Win11 du dessin : supprimez l'arrière-plan en un seul clic pour réaliser la fonction de découpe Sep 15, 2023 pm 10:53 PM

Microsoft invite les membres du projet WindowsInsider dans les canaux Canary et Dev à tester et expérimenter la nouvelle application Paint. Le dernier numéro de version est 11.2306.30.0. La nouvelle fonctionnalité la plus remarquable de cette mise à jour de version est la fonction de découpe en un clic. Les utilisateurs n'ont besoin de cliquer qu'une seule fois pour éliminer automatiquement l'arrière-plan et mettre en évidence le corps principal de l'image, ce qui facilite les opérations ultérieures des utilisateurs. L'ensemble de l'étape est très simple. L'utilisateur importe l'image dans la nouvelle application de mise en page, puis clique sur le bouton « supprimer l'arrière-plan » de la barre d'outils pour supprimer l'arrière-plan de l'image. L'utilisateur peut également utiliser un rectangle pour sélectionner la zone à supprimer. l'arrière-plan.

See all articles