KB4058565 – PATAISYMAS: tvirtinimo klaida vykdant įrašytą procedūrą, nurodančią didelį objektą „SQL Server“ 2014, 2016 ir 2017

Taikoma
SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2017 Standard on Windows SQL Server 2016 Service Pack 1 SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use)

Požymiai

Tvirtinimo klaida gali įvykti, kai "Microsoft „SQL Server“" pakartotinai vykdo išsaugotą procedūrą, kuri atlieka šiuos veiksmus:

  • Naudoja didelį objektą, pvz., varchar(max) arba varbinary(max), kaip argumentą ir
  • Sukuria laikiną lentelę, susietą su procedūros vykdymu, ir
  • Naudoja laikinoje lentelėje esantį argumentą didelis objektas.

Tvirtinimo klaidą, panašią į šią "„SQL Server“" klaidų žurnale, galite rasti:

datos / laiko SPID Klaida: 17065, sunkumas: 16, būsena: 1.

Data / laikas SPID „SQL Server“ Patvirtinimas: Failas: FilePath\FileName, line = LineNumber Nepavyko Assertion = 'fFalse' Bandymas pasiekti nebegaliojančią BLOB rankenėlę (1). Ši klaida gali būti susijusi su laiku. Jei klaida kartojasi pakartotinai paleidus sakinį, naudokite DBCC CHECKDB, norėdami patikrinti duomenų bazės struktūrinį vientisumą, arba iš naujo paleiskite serverį, kad užtikrintumėte, jog atminties duomenų struktūros nėra sugadintos.

datos / laiko SPID Klaida: 3624, Sunkumas: 20, Būsena: 1.

datos / laiko SPID Sistemos patvirtinimo patikra nepavyko. Išsamios informacijos ieškokite „SQL Server“ klaidų žurnale. Paprastai patvirtinimo triktį sukelia programinės įrangos klaida arba duomenų sugadinimas. Norėdami patikrinti, ar duomenų bazė nesugadinta, paleiskite DBCC CHECKDB. Jei sąrankos metu sutikote siųsti iškeltis "„Microsoft“", "„Microsoft“" bus nusiųsta mini iškeltis. Naujinimas gali būti gautas iš "„Microsoft“" naujausiame pakeitimų pakete arba techninio palaikymo tarnybos karštojoje pataisoje.

Priežastis

"„SQL Server“" turi vidinę logiką, leidžiančią išjungti užklausų, nurodančių didelius objektus, kaupimą talpykloje, kad vėlesni vykdymai nenurodytų tų LOB (kurie buvo sukurti ankstesnių vykdymų metu, todėl netinkami vėlesniems vykdymams). Ši logika nepadėjo išspręsti atidėto vardo sprendimo (DNR) atvejo laikinose lentelėse, dėl kurių šie planai buvo saugomi talpykloje. Aprėpties laikinąsias lenteles kurti yra brangu, o „SQL Server“ jas saugo talpykloje, kad būtų galima pakartotinai naudoti vėlesniuose vykdymuose. Tai neleidžia iš naujo kompiliuoti tokių užklausų dėl schemos pakeitimų.

Sužinokite daugiau apie atidėto pavadinimo sprendimą.

Sprendimas

Ši problema išspręsta šiuose kaupiamuosiuose "„SQL Server“" naujinimuose:

8 kaupiamasis naujinimas, skirtas „SQL Server“ 2016 SP1

4 kaupiamasis naujinimas, skirtas „SQL Server“ 2017

10 kaupiamasis naujinimas, skirtas „SQL Server“ 2014 2 pakeitimų paketui

Apie kaupiamuosius „SQL Server“ naujinimus

Kiekviename naujame kaupiamajame "„SQL Server“" naujinime yra visos ankstesnės versijos karštosios pataisos ir saugos pataisos. Peržiūrėkite naujausią "„SQL Server“" kaupiamąjį naujinimą:

Naujausias kaupiamasis naujinimas, skirtas „SQL Server“ 2016

Naujausias "„SQL Server“ 2017" kaupiamasis naujinimas

Naujausi kaupiamieji naujinimai, skirti „SQL Server“ 2014

Būsena

„„Microsoft““ patvirtino, kad tai yra „„Microsoft““ produktų, išvardytų dalyje „Taikoma“, problema.

Nuorodos

Sužinokite daugiau apie terminus , kuriuos "„Microsoft“" naudoja apibūdindama programinės įrangos naujinimus.