Microsoft distribuie remedierile Microsoft SQL Server 2008 R2 ca fișier ce poate fi descărcat. Deoarece remedierile sunt cumulative, fiecare versiune nouă conține toate remedierile rapide și toate remedierile de securitate care au fost incluse în ediția anterioară de remediere SQL Server 2008 R2.
Simptome
Luați în considerare următorul scenariu:
-
Aveți un model de Servicii de date coordonatoare (MDS) și o entitate care are un atribut bazat pe domeniu în Microsoft SQL Server 2008 R2. Atributul bazat pe domeniu este proiectat să facă referire automată la același atribut.De exemplu, aveți o entitate Angajat care are un atribut ManagerName. Atributul ManagerName se referă la aceeași entitate angajat propriu-zisă.Notă Un manager este, de asemenea, un fel de angajat.
-
Există o ierarhie derivată care este definită pe un atribut pentru a afișa relația părinte/fiu recursivă pentru atributul bazat pe domeniu.
-
Încărcați valori de date care conțin una sau mai multe referințe circulare la tabelul de tranziție MDS. Acest comportament provoacă o referință circulară, iar primul nod din atribut nu face parte din cerc.De exemplu, următorul model de date afișează o referință circulară. Cu toate acestea, valoarea membrului Membru1 nu face parte din cerc:
Member1 --manager attribute--> atribut Member2 --manager attribute--> atribut Member3 --manager--> 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)
-
Utilizați una dintre următoarele metode pentru a încărca valori de date în entitate, utilizând procesul de etapizare MDS:
-
Rulați exec [mdm]. Procedura [udpStagingSweep] utilizând parametrii necesari pentru procesarea datelor pe etape.
-
Faceți clic pe Gestionare integrare pentru a vizita pagina de pornire a site-ului web MDS. Pe pagina Import export , sub antetul secțiunii Înregistrări de etapizare dezmățate , faceți clic pe pictograma roată dințată pentru a procesa înregistrările pentru un anumit model și versiune.
-
În acest scenariu, procesul de fundal în timpul procesului de etapizare poate întâlni o buclă infinită atunci când procesul de fundal apelează intern [mdm]. [udpMemberRecursiveCircularCheck] procedură.
Cauză
Această problemă apare deoarece procedurile udpStagingSweep și udpStagingMemberAttributeSave apelează procedura udpMemberRecursiveCircularCheck o dată pentru fiecare rând de tranziție. Acest comportament ar trebui să verifice o valoare de atribut bazată pe domeniu și returnează o eroare dacă rândul de tranziție provoacă o referință circulară împreună cu datele existente. După ce sunt bifată toate rândurile de etapizare, primiți următoarele rezultate:
-
Se aplică rândurile de etapizare fără erori.
-
Rândurile de tranziție cu erori sunt notate cu un cod de eroare.
Dacă condițiile descrise în secțiunea "Simptome" sunt adevărate, [mdm]. [udpMemberRecursiveCircularCheck] bucle de procedură pe o perioadă nedeterminată, până când resursele serverului sunt epuizate sau are loc o expirare.
Rezolvare
Informații despre actualizarea cumulativă
SQL Server 2008 R2 Service Pack 1
Remedierea pentru această problemă a fost lansată pentru prima dată în actualizarea cumulativă 4. Pentru mai multe informații despre obținerea acestui pachet de actualizare cumulativă pentru SQL Server 2008 R2 SP1, faceți clic pe următorul număr de articol pentru a vizualiza articolul în Baza de cunoștințe Microsoft:
2633146 Pachetul de actualizare cumulativă 4 pentru SQL Server 2008 R2 Service Pack 1Note Deoarece compilările sunt cumulative, fiecare lansare nouă de remediere conține toate remedierile rapide și toate remedierile de securitate care au fost incluse în versiunea de remediere anterioară SQL Server 2008 R2 SP1. Vă recomandăm să luați în considerare aplicarea celei mai recente remedieri care conține această remediere rapidă. Pentru mai multe informații, faceți clic pe următorul număr de articol pentru a-l vedea în Baza de cunoștințe Microsoft:
2567616 Compilările SQL Server 2008 R2 care au fost lansate după lansarea SQL Server 2008 R2 Service Pack 1
Stare
Microsoft a confirmat că aceasta este o problemă în produsele Microsoft enumerate în secțiunea „Se aplică la”.
Soluție de evitare
Pentru a evita această problemă, utilizați una dintre metodele următoare:
-
Pentru a preveni problema, urmați acești pași:
-
Revizuiți manual valorile de date ale membrilor care sunt inserate în tabelul de tranziție înainte de a rula procesul de tranziție.
-
Asigurați-vă că toate valorile membrilor pentru orice atribute bazate pe domeniu nu conțin referințe circulare descrise în secțiunea "Simptome"
-
-
Atunci când apare problema descrisă în secțiunea "Simptome", urmați acești pași pentru a corecta problema:
-
Identificați sesiunea care rulează în buclă infinită.
-
Ucide sesiunea pentru a opri bucla.
-
Ștergeți valorile de referință circulare din tabelul de tranziție înainte ca referința circulară să fie procesată din nou.
-
Note
-
Pentru a identifica ce sesiune să ucideți, utilizați una dintre următoarele metode:
-
Utilizați un monitor de activitate în Microsoft SQL Server Management Studio.
-
Selectați din sys.sysprocesses sau sys.dm_exec_requests vizualizare gestionare dinamică (DMV) pentru a identifica sesiunile care funcționează în cadrul bazei de date MDS în care CPU și timpul se incrementează rapid. Asigurați-vă că interogarea curentă care rulează în sesiune se potrivește cu numele procedurii descrise în secțiunea "Cauză".
-
-
Pentru a identifica procedura care rulează în prezent pentru sesiuni, utilizați una dintre următoarele metode:
-
Faceți clic dreapta pe meniul Detalii din fiecare proces din listarea proceselor de monitorizare a activității.
-
Utilizați unul dintre următorii parametri:
-
Comanda DBCC INPUTBUFFER (spid) împreună cu ID-ul sesiunii.
-
Funcția SELECT * FROM sys.dm_exec_sql_text(sqlhandle) împreună cu parametrul de handle SQL corespunzător atunci când utilizați ieșirea DMV.
-
-
Referințe
Pentru mai multe informații despre cum să deschideți un monitor de activitate în SQL Server Management Studio, vizitați următorul site web MSDN:
Cum se deschide un monitor de activitate în SQL Server Management StudioPentru mai multe informații despre sintaxa KILL, vizitați următorul site web MSDN:
Informații generale despre sintaxa KILLPentru mai multe informații despre sys.dm_exec_requests DMV, vizitați următorul site web MSDN:
Informații generale despre DMV sys.dm_exec_requestsPentru mai multe informații despre sys.dm_exec_sql_text DMV, vizitați următorul site web MSDN:
Informații generale despre DMV sys.dm_exec_sql_textPentru mai multe informații despre comanda DBCC INPUTBUFFER, vizitați următorul site web MSDN:
Informații generale despre comanda DBCC INPUTBUFFERPentru mai multe informații despre modelul de servicii incrementale pentru SQL Server, faceți clic pe următorul număr de articol pentru a vedea articolul în Baza de cunoștințe Microsoft:
935897 Un model de servicii incrementale este disponibil de la echipa de SQL Server pentru a livra remedieri rapide pentru problemele raportatePentru mai multe informații despre schema de denumire pentru actualizările SQL Server, faceți clic pe următorul număr de articol pentru a vedea articolul în Baza de cunoștințe Microsoft:
822499 Schemă de denumire nouă pentru pachetele de actualizări de software Microsoft SQL Server Pentru mai multe informații despre terminologia actualizărilor de software, faceți clic pe următorul număr de articol pentru a vedea articolul în Baza de cunoștințe Microsoft:
824684 Descrierea terminologiei standard care este utilizată pentru a descrie actualizările de software Microsoft