Firma Microsoft rozpowszechnia poprawki microsoft SQL Server 2008 R2 jako jeden plik do pobrania. Ponieważ poprawki są zbiorcze, każda nowa wersja zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń, które zostały uwzględnione w poprzedniej wersji poprawki SQL Server 2008 R2.
Symptomy
Rozpatrzmy następujący scenariusz:
-
Masz model i jednostkę Master Data Services (MDS), która ma atrybut oparty na domenie w programie Microsoft SQL Server 2008 R2. Atrybut oparty na domenie jest przeznaczony do samodzielnego odwoływania się do tego samego atrybutu.Na przykład masz jednostkę pracowników, która ma atrybut ManagerName. Atrybut ManagerName odwołuje się do tej samej jednostki pracowników.Uwaga Menedżer jest również typem pracownika.
-
Istnieje hierarchia pochodna zdefiniowana dla atrybutu w celu wyświetlenia rekurencyjnej relacji nadrzędnej/podrzędnej atrybutu opartego na domenie.
-
Wartości danych, które zawierają co najmniej jedno odwołanie cykliczne do tabeli tymczasowej mds. To zachowanie powoduje odwołanie cykliczne, a pierwszy węzeł w atrybutze nie jest częścią koła.Na przykład poniższy wzorzec danych przedstawia odwołanie cykliczne. Wartość elementu Członkowskie1 nie należy jednak do koła:
Członek1 — atrybut menedżera — > członek2 -- atrybut menedżera -- > członek 3 -- atrybut menedżera -- > Member2 --atrybut menedżera --> 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)
-
Za pomocą jednej z następujących metod można załadować wartości danych do jednostki przy użyciu procesu przemieszczania mds:
-
Uruchom exec [mdm]. Procedura [udpStagingSweep] przy użyciu parametrów niezbędnych do przetworzenia danych etapowych.
-
Kliknij pozycję Zarządzanie integracją , aby odwiedzić stronę główną witryny mds. Na stronie Importowanie eksportu w obszarze nagłówka sekcji Unbatched Staging Records (Niezapisane rekordy przemieszczania ) kliknij ikonę koła zębatego , aby przetworzyć rekordy dla określonego modelu i wersji.
-
W tym scenariuszu proces w tle podczas procesu przemieszczania może napotkać nieskończoną pętlę, gdy proces tła wewnętrznie wywołuje [mdm]. [udpMemberRecursiveCircularCheck] procedura.
Przyczyna
Ten problem występuje, ponieważ procedury udpStagingSweep i udpStagingMemberAttributeSave powołują procedurę udpMemberRecursiveCircularCheck jeden raz dla każdego wiersza przemieszczania. To zachowanie powinno sprawdzać wartość atrybutu opartą na domenie i zwracać błąd, jeśli wiersz przemieszczania powoduje odwołanie cykliczne razem z istniejącymi danymi. Po sprawdzeniu wszystkich wierszy przemieszczania otrzymasz następujące wyniki:
-
Wiersze przemieszczania bez błędów zostaną zastosowane.
-
Etapowe wiersze z błędami są zanotowane z kodem błędu.
Jeśli warunki opisane w sekcji "Objawy" są prawdziwe, wartość [mdm]. [udpMemberRecursiveCircularCheck] procedura pętli w nieskończoność, dopóki zasoby serwera nie zostaną wyczerpane lub wystąpi limit czasu.
Rozwiązanie
Informacje o aktualizacji zbiorczej
dodatek Service Pack 1 dla SQL Server 2008 R2
Poprawka rozwiązła ten problem została opublikowana po raz pierwszy w aktualizacji zbiorczej 4. Aby uzyskać więcej informacji na temat uzyskiwania tego zbiorczego pakietu aktualizacji dla SQL Server 2008 R2 z dodatkiem SP1, kliknij następujący numer artykułu, aby wyświetlić ten artykuł w bazie wiedzy Microsoft Knowledge Base:
2633146 Pakiet aktualizacji zbiorczej 4 dla SQL Server 2008 R2 z dodatkiem Service Pack 1Note Ponieważ kompilacje są zbiorcze, każda nowa wersja poprawki zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń, które zostały uwzględnione w poprzedniej wersji poprawki z SQL Server 2008 R2 z dodatkiem SP1. Zalecamy rozważenie zastosowania najnowszej wersji poprawki zawierającej tę poprawkę. Aby uzyskać więcej informacji, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
2567616 Udostępniono kompilacje SQL Server 2008 R2 wydane po SQL Server 2008 R2 z dodatkiem Service Pack 1.
Stan
Firma Microsoft potwierdziła, że jest to problem w produktach firmy Microsoft wymienionych w sekcji "Dotyczy".
Obejście
Aby obejść ten problem, użyj jednej z następujących metod:
-
Aby zapobiec występowaniu problemu, wykonaj następujące czynności:
-
Przed uruchomieniem procesu przemieszczania należy ręcznie przejrzeć wartości danych elementów członkowskich wstawianych do tabeli przemieszczania.
-
Upewnij się, że wszystkie wartości elementów członkowskich dla atrybutów opartych na domenie nie zawierają odwołań cyklicznych opisanych w sekcji "Symptomy"
-
-
W przypadku wystąpienia problemu opisanego w sekcji "Objawy" wykonaj następujące czynności, aby rozwiązać ten problem:
-
Zidentyfikuj sesję uruchomioną w pętli nieskończonej.
-
Zabij sesję, aby zatrzymać pętlę.
-
Przed ponownym przetworzeniem odwołania cyklicznego usuń wartości odwołania cyklicznego z tabeli przejściowej.
-
Uwagi
-
Aby zidentyfikować sesję do zabicia, użyj jednej z następujących metod:
-
Korzystaj z monitora aktywności w aplikacji Microsoft SQL Server Management Studio.
-
Wybierz pozycję z widoku sys.sysprocesses lub sys.dm_exec_requests widoku zarządzania dynamicznego (DMV), aby zidentyfikować sesje działające w bazie danych MDS, w której procesor i czas szybko się inkrementują. Upewnij się, że bieżące zapytanie uruchomione w sesji jest zgodne z nazwami procedur opisanymi w sekcji "Przyczyna".
-
-
Aby zidentyfikować bieżącą procedurę dla sesji, użyj jednej z następujących metod:
-
Kliknij prawym przyciskiem myszy menu Szczegóły każdego procesu na liście procesów monitora aktywności.
-
Użyj jednego z następujących parametrów:
-
Polecenie DBCC INPUTBUFFER (spid) wraz z identyfikatorem sesji.
-
Funkcja SELECT * FROM sys.dm_exec_sql_text(sqlhandle) wraz z zgodnym parametrem uchwytu SQL podczas korzystania z danych wyjściowych DMV.
-
-
Informacje
Aby uzyskać więcej informacji na temat otwierania monitora aktywności w SQL Server Management Studio, odwiedź następującą witrynę internetową MSDN:
Jak otworzyć monitor aktywności w SQL Server Management StudioAby uzyskać więcej informacji na temat składni KILL, odwiedź następującą witrynę internetową MSDN:
Ogólne informacje o składni KILLAby uzyskać więcej informacji na temat sys.dm_exec_requests DMV, odwiedź następującą witrynę internetową MSDN:
Ogólne informacje o sys.dm_exec_requests DMVAby uzyskać więcej informacji na temat sys.dm_exec_sql_text DMV, odwiedź następującą witrynę internetową MSDN:
Ogólne informacje o sys.dm_exec_sql_text DMVAby uzyskać więcej informacji na temat polecenia DBCC INPUTBUFFER, odwiedź następującą witrynę internetową MSDN:
Ogólne informacje o poleceniu DBCC INPUTBUFFERAby uzyskać więcej informacji na temat przyrostowego modelu obsługi dla SQL Server, kliknij następujący numer artykułu, aby wyświetlić ten artykuł w bazie wiedzy Microsoft Knowledge Base:
935897 Zespół SQL Server udostępnia przyrostowy model obsługi w celu dostarczenia poprawek zgłoszonych problemów Aby uzyskać więcej informacji na temat schematu nazewnictwa dla aktualizacji SQL Server, kliknij następujący numer artykułu, aby wyświetlić ten artykuł w bazie wiedzy Microsoft Knowledge Base:
822499 Nowy schemat nazewnictwa dla pakietów aktualizacji oprogramowania firmy Microsoft SQL Server Aby uzyskać więcej informacji na temat terminologii aktualizacji oprogramowania, kliknij następujący numer artykułu, aby wyświetlić ten artykuł w bazie wiedzy Microsoft Knowledge Base:
824684 Opis standardowej terminologii używanej do opisywania aktualizacji oprogramowania firmy Microsoft