"Neue Anfrage kann nicht gestartet werden, da sie mit gültigem Transaktionsdeskriptor geliefert werden sollte" auf Sql Server 2012

9

EDIT: Lösung gefunden, nach unten schauen.

Wir haben eine Webanwendung, die eine Auswahl für eine in einer Sql Server 2012 Datenbank gespeicherte Ansicht aufruft.

Diese Abfrage schlägt mit dem Fehler fehl

%Vor%

Dieses Problem tritt NUR bei einer einzelnen Kundendatenbank auf , die gleiche Abfrage, die für alle anderen Kundenschemas ausgeführt wird, läuft in Ordnung.

Die Abfrage, die in SSMS für das betroffene Schema allein ausgeführt wird, wird ordnungsgemäß ausgeführt und schlägt nur in der Anwendung für dieses bestimmte Schema fehl.

Die SELECT-Anweisung ist dies:

%Vor%

Wenn wir das Schema lokal auf anderen Sql Server-Instanzen wiederherstellen, können wir den Fehler replizieren.

Ich habe viel im Internet gesucht und alles, was ich gefunden habe, war ein Hotfix für Sql Server 2005 ( Ссылка ) und einige Posts, die sich auf verteilte Abfragen und Indexfragmentierung beziehen.

Da ich das Problem replizieren kann, was kann ich versuchen, es zu lösen?

Das Spring-Backend, auf dem die Abfrage ausgeführt wird, ist Java, und eine native SQL-Abfrage führte den Ruhezustand durch.

Java 8

Frühling 4.1.1

Ruhezustand 4.3.5

Dies ist der Code:

%Vor%

Ich habe versucht, die angepasste Isolationsstufe und die Nur-Lese-Annotation zu entfernen, das Ergebnis ist das gleiche.

BEARBEITEN: Hinzufügen des Skripts für die Erstellung der aufgerufenen Ansicht

%Vor%

Danke

BEARBEITEN SIE 2: LÖSUNG

Nach mehreren Versuchen haben wir verstanden, dass das Problem nicht aus der Auswahl auf der View, sondern aus einer anderen Abfrage, die in der gleichen Transaktion ausgeführt wurde, die nach dieser Methode aufgerufen:

%Vor%

Diese Methode nannte eine gespeicherte Prozedur, die NUR für dieses bestimmte Schema abgehört wurde, kurz gesagt, sie hatte am Ende eine falsch platzierte Einfügung. Das Entfernen des Einsatzes löste das Problem!

    
frankieta 24.03.2017, 13:54
quelle

1 Antwort

2

Nach mehreren Versuchen haben wir verstanden, dass das Problem nicht aus der Auswahl auf der View, sondern aus einer anderen Abfrage, die in der gleichen Transaktion ausgeführt wurde, die nach dieser Methode aufgerufen:

%Vor%

Diese Methode hat eine gespeicherte Prozedur aufgerufen, die NUR für dieses bestimmte Schema abgehört wurde. Kurz gesagt, hatte sie eine falsch platzierte Einfügung am Ende der gespeicherten Prozedur .

Wir haben die Lösung in mehreren Schritten gefunden:

1 - Zuerst haben wir festgestellt, dass in der gleichen @ transactional Methode 2 verschiedene Abfragen vorhanden waren, die erste war die EXEC einer gespeicherten Prozedur und die zweite die Auswahl auf der Ansicht

2 - wir haben die Abfragen in zwei separate @transactional-Methoden aufgeteilt

3 - fand heraus, dass es die erste Abfrage war, die abstürzte

4 - analysierte die gespeicherte Prozedur, um die Unterschiede zu den anderen Arbeitsschemata zu finden

5 - fand den falsch platzierten Einsatz

Das Entfernen des Einsatzes löste das Problem!

    
frankieta 03.04.2017, 16:13
quelle