Microsoft verteilt Microsoft SQL Server 2008 R2-Fixes als eine herunterladbare Datei. Da die Fixes kumulativ sind, enthält jedes neue Release alle Hotfixes und alle Sicherheitsfixes, die im vorherigen SQL Server 2008 R2-Fixrelease enthalten waren.
Problembeschreibung
Stellen Sie sich folgendes Szenario vor:
-
Sie verfügen über ein Master Data Services(MDS)-Modell und eine Entität, die über ein domänenbasiertes Attribut in Microsoft SQL Server 2008 R2 verfügt. Das domänenbasierte Attribut ist so konzipiert, dass es sich selbst auf dasselbe Attribut verweist.Beispielsweise verfügen Sie über eine Employee-Entität, die über ein ManagerName-Attribut verfügt. Das ManagerName-Attribut verweist auf dieselbe Employee-Entität selbst.Hinweis Ein Vorgesetzter ist auch eine Art Mitarbeiter.
-
Es gibt eine abgeleitete Hierarchie, die für ein Attribut definiert ist, um die rekursive Beziehung zwischen übergeordneten und untergeordneten Elementen für das domänenbasierte Attribut anzuzeigen.
-
Sie laden Datenwerte, die einen oder mehrere Zirkelverweise auf die MDS-Stagingtabelle enthalten. Dieses Verhalten verursacht einen Zirkelbezug, und der erste Knoten im Attribut ist nicht Teil des Kreises.Das folgende Datenmuster zeigt beispielsweise einen Zirkelverweis. Der Member1-Memberwert ist jedoch nicht Teil des Kreises:
Member1 --manager-attribut--> Member2 --manager-attribut--> Member3 --manager-attribut--> Member2 --manager attribute--> Member3
insert into mdm.tblStgMemberAttribute(ModelName, EntityName, MemberType_ID, MemberCode, AttributeName, AttributeValue, Status_ID)Values ('EntityTest', 'ModelTest', 1, 'Member3', 'Manager', 'Member2', 0),('EntityTest', 'ModelTest', 1, 'Member2', 'Manager', 'Member3', 0),('EntityTest', 'ModelTest', 1, 'Member3', 'Manager', 'Member2', 0),('EntityTest', 'ModelTest', 1, 'Member2', 'Manager', 'Member1', 0)('EntityTest', 'ModelTest', 1, 'Member1', 'Manager', 'NULL', 0)
-
Sie verwenden eine der folgenden Methoden, um Datenwerte mithilfe des MDS-Stagingprozesses in die Entität zu laden:
-
Führen Sie Exec [mdm] aus. [udpStagingSweep]-Prozedur unter Verwendung der erforderlichen Parameter zum Verarbeiten der bereitgestellten Daten.
-
Klicken Sie auf Integrationsverwaltung , um die Startseite der MDS-Website zu besuchen. Klicken Sie auf der Seite Import Export unter der Abschnittsüberschrift Unbatched Staging Records auf das Zahnradsymbol , um die Datensätze für ein bestimmtes Modell und eine bestimmte Version zu verarbeiten.
-
In diesem Szenario kann der Hintergrundprozess während des Stagingprozesses auf eine Endlosschleife stoßen, wenn der Hintergrundprozess intern [mdm] aufruft. [udpMemberRecursiveCircularCheck]-Prozedur.
Ursache
Dieses Problem tritt auf, weil die Prozeduren udpStagingSweep und udpStagingMemberAttributeSave die udpMemberRecursiveCircularCheck-Prozedur einmal für jede Stagingzeile aufrufen. Dieses Verhalten sollte einen domänenbasierten Attributwert überprüfen und einen Fehler zurückgeben, wenn die Stagingzeile einen Zirkelverweis zusammen mit den vorhandenen Daten verursacht. Nachdem alle Stagingzeilen überprüft wurden, erhalten Sie die folgenden Ergebnisse:
-
Die Stagingzeilen ohne Fehler werden angewendet.
-
Die Stagingzeilen mit Fehlern werden mit einem Fehlercode notiert.
Wenn die bedingungen, die im Abschnitt "Symptome" beschrieben werden, zutreffen, [mdm]. Die [udpMemberRecursiveCircularCheck]-Prozedur wird unbegrenzt ausgeführt, bis entweder die Serverressourcen erschöpft sind oder ein Timeout auftritt.
Lösung
Informationen zum kumulativen Update
SQL Server 2008 R2 Service Pack 1
Die Behebung dieses Problems wurde zuerst im kumulativen Update 4 veröffentlicht. Weitere Informationen zum Abrufen dieses kumulativen Updatepakets für SQL Server 2008 R2 SP1 finden Sie in den folgenden Artikeln der Microsoft Knowledge Base:
2633146 Kumulatives Updatepaket 4 für SQL Server 2008 R2 Service Pack 1Hinweis Da die Builds kumulativ sind, enthält jedes neue Fixrelease alle Hotfixes und alle Sicherheitsfixes, die im vorherigen SQL Server 2008 R2 SP1-Fixrelease enthalten waren. Es wird empfohlen, dass Sie das neueste Updaterelease anwenden, das diesen Hotfix enthält. Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
2567616 Die SQL Server 2008 R2-Builds, die nach SQL Server 2008 R2 Service Pack 1 veröffentlicht wurden
Status
Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel genannten Microsoft-Produkten handelt.
Problemumgehung
Wenden Sie eine der folgenden Methoden an, um dieses Problem zu umgehen:
-
Führen Sie die folgenden Schritte aus, um das Problem zu verhindern:
-
Überprüfen Sie manuell die Memberdatenwerte, die in die Stagingtabelle eingefügt werden, bevor Sie den Stagingprozess ausführen.
-
Stellen Sie sicher, dass alle Memberwerte für domänenbasierte Attribute keine Zirkelverweise enthalten, die im Abschnitt "Symptome" beschrieben sind.
-
-
Wenn das im Abschnitt "Symptome" beschriebene Problem auftritt, führen Sie die folgenden Schritte aus, um das Problem zu beheben:
-
Identifizieren Sie die Sitzung, die in der Endlosschleife ausgeführt wird.
-
Beenden Sie die Sitzung, um die Schleife zu beenden.
-
Löschen Sie die Zirkelverweiswerte aus der Stagingtabelle, bevor der Zirkelverweis erneut verarbeitet wird.
-
Hinweise
-
Verwenden Sie eine der folgenden Methoden, um zu ermitteln, welche Sitzung beendet werden soll:
-
Verwenden Sie einen Aktivitätsmonitor in Microsoft SQL Server Management Studio.
-
Wählen Sie unter sys.sysprocesses oder sys.dm_exec_requests dynamische Verwaltungssicht (Dynamic Management View, DMV) aus, um die Sitzungen zu identifizieren, die innerhalb der MDS-Datenbank ausgeführt werden, in der CPU und Zeit schnell inkrementiert werden. Stellen Sie sicher, dass die aktuelle Abfrage, die in der Sitzung ausgeführt wird, mit den Prozedurnamen übereinstimmt, die im Abschnitt "Ursache" beschrieben werden.
-
-
Verwenden Sie eine der folgenden Methoden, um die derzeit ausgeführte Prozedur für die Sitzungen zu identifizieren:
-
Klicken Sie in jedem Prozess in der Liste der Aktivitätsmonitorprozesse mit der rechten Maustaste auf das Menü Details .
-
Verwenden Sie einen der folgenden Parameter:
-
Der Befehl DBCC INPUTBUFFER (spid) zusammen mit der Sitzungs-ID.
-
Die SELECT * FROM sys.dm_exec_sql_text(sqlhandle)-Funktion zusammen mit dem entsprechenden SQL-Handle-Parameter, wenn Sie die DMV-Ausgabe verwenden.
-
-
Informationsquellen
Weitere Informationen zum Öffnen eines Aktivitätsmonitors in SQL Server Management Studio finden Sie auf der folgenden MSDN-Website:
Öffnen eines Aktivitätsmonitors in SQL Server Management StudioWeitere Informationen zur KILL-Syntax finden Sie auf der folgenden MSDN-Website:
Allgemeine Informationen zur KILL-SyntaxWeitere Informationen zum sys.dm_exec_requests DMV finden Sie auf der folgenden MSDN-Website:
Allgemeine Informationen zur sys.dm_exec_requests DMVWeitere Informationen zum sys.dm_exec_sql_text DMV finden Sie auf der folgenden MSDN-Website:
Allgemeine Informationen zur sys.dm_exec_sql_text DMVWeitere Informationen zum BEFEHL DBCC INPUTBUFFER finden Sie auf der folgenden MSDN-Website:
Allgemeine Informationen zum BEFEHL DBCC INPUTBUFFERWeitere Informationen zum inkrementellen Wartungsmodell für SQL Server finden Sie in der Microsoft Knowledge Base im folgenden Artikel:
935897 Ein inkrementelles Wartungsmodell ist vom SQL Server-Team verfügbar, um Hotfixes für gemeldete Probleme bereitzustellen. Weitere Informationen zum Benennungsschema für SQL Server Updates finden Sie in der Microsoft Knowledge Base auf die folgende Artikelnummer:
822499 Neues Benennungsschema für Microsoft SQL Server SoftwareupdatepaketeZu weiteren Informationen zur Terminologie von Softwareupdates klicken Sie auf die folgende Artikelnummer, um den Artikel in der Microsoft Knowledge Base anzuzeigen:
824684 Erläuterung von Standardbegriffen bei Microsoft-Softwareupdates