Rumah pangkalan data tutorial mysql Error:7884,Severity:20,State:1

Error:7884,Severity:20,State:1

Jun 07, 2016 pm 04:10 PM
error state latar belakang

背景: 程序异常中断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()
Salin selepas log masuk

故障处理:

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

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Penyelesaian kepada PHP Ralat maut: Panggilan ke kaedah yang tidak ditentukan PDO::prepare() in Penyelesaian kepada PHP Ralat maut: Panggilan ke kaedah yang tidak ditentukan PDO::prepare() in Jun 22, 2023 pm 06:40 PM

PHP ialah bahasa pembangunan web popular yang telah digunakan sejak sekian lama. Kelas PDO (Objek Data PHP) yang disepadukan dalam PHP adalah cara biasa untuk kita berinteraksi dengan pangkalan data semasa pembangunan aplikasi web. Walau bagaimanapun, masalah yang sering dihadapi oleh sesetengah pembangun PHP ialah apabila menggunakan kelas PDO untuk berinteraksi dengan pangkalan data, mereka menerima ralat seperti ini: PHPFatalerror:CalltoundefinedmethodPDO::prep

Selesaikan masalah 'ralat: jenis tidak lengkap tidak dibenarkan' dalam kod C++ Selesaikan masalah 'ralat: jenis tidak lengkap tidak dibenarkan' dalam kod C++ Aug 26, 2023 pm 08:54 PM

Selesaikan masalah "error:incompletetypeisnotallowed" dalam kod C++ Semasa proses pengaturcaraan C++, anda kadangkala menghadapi beberapa ralat kompilasi Salah satu ralat biasa ialah "error:incompletetypeisnotallowed". Ralat ini biasanya disebabkan oleh operasi pada jenis yang tidak lengkap. Artikel ini akan menerangkan punca ralat ini dan menyediakan beberapa penyelesaian. Pertama sekali, saya

Apakah yang perlu saya lakukan jika 'Ralat Tidak Ditangkap (dalam janji): Permintaan gagal dengan kod status 500' berlaku apabila menggunakan axios dalam aplikasi Vue? Apakah yang perlu saya lakukan jika 'Ralat Tidak Ditangkap (dalam janji): Permintaan gagal dengan kod status 500' berlaku apabila menggunakan axios dalam aplikasi Vue? Jun 24, 2023 pm 05:33 PM

Sangat biasa untuk menggunakan axios dalam aplikasi Vue ialah klien HTTP berasaskan Promise yang boleh digunakan dalam penyemak imbas dan Node.js. Semasa proses pembangunan, mesej ralat "Uncaught(inpromise)Error: Requestfailedwithstatuscode500" kadangkala muncul untuk pembangun, mesej ralat ini mungkin sukar difahami dan diselesaikan. Artikel ini akan meneroka perkara ini

0271: Apakah yang perlu saya lakukan jika komputer tidak boleh dihidupkan kerana ralat jam masa nyata? 0271: Apakah yang perlu saya lakukan jika komputer tidak boleh dihidupkan kerana ralat jam masa nyata? Mar 13, 2023 am 11:30 AM

Penyelesaian kepada "0271: ralat jam masa nyata" yang tidak boleh dihidupkan: 1. Tekan F1, dan dalam antara muka yang muncul, alihkan bar pilihan ke item ketiga "Tarikh/Masa" 2. Tukar masa sistem secara manual ke masa semasa; 3. Tekan F10 dan pilih ya dalam kotak dialog pop timbul 4. Buka semula buku nota untuk but seperti biasa.

Bagaimana untuk menetapkan gambar sebagai latar belakang dalam OneNote Bagaimana untuk menetapkan gambar sebagai latar belakang dalam OneNote May 14, 2023 am 11:16 AM

Onenote ialah salah satu alat pengambilan nota terbaik yang ditawarkan oleh Microsoft. Digabungkan dengan Outlook dan MSTeams, Onenote boleh menjadi gabungan yang hebat untuk meningkatkan produktiviti kerja dan kreatif peribadi. Kita perlu mencatat nota dalam format yang berbeza, yang mungkin lebih daripada sekadar menulis perkara. Kadangkala kita perlu menyalin imej daripada sumber yang berbeza dan melakukan beberapa penyuntingan dalam kerja harian kita. Imej yang ditampal pada Onenote boleh membantu jika anda tahu cara menggunakan perubahan. Pernahkah anda menghadapi masalah semasa menggunakan Onenote bahawa imej yang ditampal pada Onenote tidak boleh membenarkan anda berfungsi dengan mudah? Artikel ini akan melihat penggunaan imej secara berkesan pada Onenote. kita boleh

Selesaikan masalah 'ralat: pemula dijangka sebelum 'datatype'' dalam kod C++ Selesaikan masalah 'ralat: pemula dijangka sebelum 'datatype'' dalam kod C++ Aug 25, 2023 pm 01:24 PM

Selesaikan masalah "error:expectedinitializerbefore'datatype'" dalam kod C++ Dalam pengaturcaraan C++, kadangkala kita menghadapi beberapa ralat kompilasi semasa menulis kod. Ralat ini biasanya berlaku dalam pengisytiharan berubah atau definisi fungsi dan boleh menyebabkan atur cara gagal untuk menyusun dengan betul atau

Bagaimana untuk menyelesaikan Amaran PHP: fopen(): gagal membuka strim: Tiada fail atau direktori sedemikian Bagaimana untuk menyelesaikan Amaran PHP: fopen(): gagal membuka strim: Tiada fail atau direktori sedemikian Aug 19, 2023 am 10:44 AM

Bagaimana untuk menyelesaikan PHPWarning:fopen():failedtoopenstream:Nosuchfileordirectory Dalam proses menggunakan pembangunan PHP, kita sering menghadapi beberapa masalah pengendalian fail, salah satunya ialah "PHPWarning:fopen():failedtoopenstream:Nosuchfileordirectory"

Penyelesaian kepada ralat PHP Fatal: Panggilan ke fungsi yang tidak ditentukan mysqli_connect() Penyelesaian kepada ralat PHP Fatal: Panggilan ke fungsi yang tidak ditentukan mysqli_connect() Jun 23, 2023 am 09:40 AM

Apabila menulis aplikasi web menggunakan PHP, pangkalan data MySQL sering digunakan untuk menyimpan data. PHP menyediakan cara untuk berinteraksi dengan pangkalan data MySQL yang dipanggil MySQLi. Walau bagaimanapun, kadangkala apabila menggunakan MySQLi, anda akan menemui mesej ralat, seperti yang ditunjukkan di bawah: PHPFatalerror:Calltoundefinedfunctionmysqli_connect() Mesej ralat ini bermakna PHP tidak dapat mencari saya

See all articles