Microsoft distribuisce le correzioni di Microsoft SQL Server 2008 R2 come un unico file scaricabile. Poiché le correzioni sono cumulative, ogni nuova versione contiene tutti gli aggiornamenti rapidi e tutte le correzioni per la sicurezza inclusi nella versione di correzione precedente SQL Server 2008 R2.
Sintomi
Considerare lo scenario descritto di seguito:
-
Si dispone di un modello e di un'entità di Master Data Services (MDS) con un attributo basato su dominio in Microsoft SQL Server 2008 R2. L'attributo basato sul dominio è stato progettato in modo da fare riferimento all'attributo stesso.Ad esempio, si ha un'entità Employee con un attributo ManagerName. L'attributo ManagerName fa riferimento alla stessa entità Employee.Nota Un manager è anche un tipo di dipendente.
-
Esiste una gerarchia derivata definita su un attributo per visualizzare la relazione padre/figlio ricorsiva per l'attributo basato sul dominio.
-
Si caricano i valori di dati che contengono uno o più riferimenti circolari alla tabella di gestione temporanea MDS. Questo comportamento causa un riferimento circolare e il primo nodo dell'attributo non fa parte del cerchio.Ad esempio, il modello di dati seguente mostra un riferimento circolare. Tuttavia, il valore membro Member1 non fa parte del cerchio:
Member1 --attributo manager--> Member2 --attributo manager--> Member3 --attributo manager--> Member2 --attributo manager--> 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)
-
Utilizzare uno dei metodi seguenti per caricare i valori dei dati nell'entità utilizzando il processo di gestione temporanea MDS:
-
Eseguire Exec [mdm]. [udpStagingSweep] utilizzando i parametri necessari per elaborare i dati a fasi.
-
Fare clic su Gestione integrazione per visitare la home page del sito Web MDS. Nell'intestazione della sezione Unbatched Staging Records della pagina Import Export fare clic sull'icona a forma di ingranaggio per elaborare i record per un determinato modello e versione.
-
In questo scenario, il processo in background durante il processo di gestione temporanea può riscontrare un ciclo infinito quando il processo in background chiama internamente [mdm]. [udpMemberRecursiveCircularCheck].
Causa
Questo problema si verifica perché le routine udpStagingSweep e udpStagingMemberAttributeSave chiamano la routine udpMemberRecursiveCircularCheck una sola volta per ogni riga di gestione temporanea. Questo comportamento deve controllare un valore di attributo basato su dominio e restituisce un errore se la riga di gestione temporanea causa un riferimento circolare insieme ai dati esistenti. Dopo aver controllato tutte le righe di gestione temporanea, si ricevono i risultati seguenti:
-
Vengono applicate le righe di gestione temporanea senza errori.
-
Le righe di gestione temporanea con errori vengono annotate con un codice di errore.
Se le condizioni descritte nella sezione "Sintomi" sono vere, il [mdm]. La routine [udpMemberRecursiveCircularCheck] viene eseguita a ciclo continuo fino a esaurire le risorse del server o a causa di un timeout.
Risoluzione
Informazioni sugli aggiornamenti cumulativi
SQL Server 2008 R2 Service Pack 1
La correzione di questo problema è stata rilasciata per la prima volta nell'aggiornamento cumulativo 4. Per altre informazioni su come ottenere questo pacchetto di aggiornamento cumulativo per SQL Server 2008 R2 SP1, fare clic sul numero dell'articolo seguente per visualizzare l'articolo della Microsoft Knowledge Base:
2633146 Pacchetto di aggiornamento cumulativo 4 per SQL Server 2008 R2 Service Pack 1Note Poiché le build sono cumulative, ogni nuova versione di correzione contiene tutti gli aggiornamenti rapidi e tutte le correzioni per la sicurezza inclusi nella versione di correzione precedente SQL Server 2008 R2 SP1. È consigliabile applicare la versione più recente di correzione che contiene questo hotfix. Per ulteriori informazioni, fare clic sul numero dell'articolo seguente per visualizzare l'articolo nella Microsoft Knowledge Base:
2567616 Build SQL Server 2008 R2 rilasciate dopo il rilascio di SQL Server 2008 R2 Service Pack 1
Stato
Microsoft ha confermato che questo problema si verifica nei prodotti elencati nella sezione "Si applica a".
Soluzione alternativa
Per ovviare a questo problema, utilizzare uno dei seguenti metodi:
-
Per evitare il problema, procedere come segue:
-
Esaminare manualmente i valori dei dati dei membri che vengono inseriti nella tabella di gestione temporanea prima di eseguire il processo di gestione temporanea.
-
Verificare che tutti i valori dei membri per gli attributi basati su dominio non contengano riferimenti circolari descritti nella sezione "Sintomi"
-
-
Quando si verifica il problema descritto nella sezione "Sintomi", seguire questa procedura per risolvere il problema:
-
Identificare la sessione in esecuzione nel ciclo infinito.
-
Uccidi la sessione per fermare il loop.
-
Eliminare i valori di riferimento circolare dalla tabella di gestione temporanea prima che il riferimento circolare venga elaborato di nuovo.
-
Note
-
Per identificare la sessione da uccidere, utilizza uno dei seguenti metodi:
-
Usare un monitor attività in Microsoft SQL Server Management Studio.
-
Selezionare da sys.sysprocesses o sys.dm_exec_requests visualizzazione di gestione dinamica (DMV) per identificare le sessioni che funzionano all'interno del database MDS in cui la CPU e il tempo vengono incrementati rapidamente. Verificare che la query corrente in esecuzione nella sessione corrisponda ai nomi delle procedure descritti nella sezione "Causa".
-
-
Per identificare la procedura attualmente in esecuzione per le sessioni, utilizzare uno dei metodi seguenti:
-
Fare clic con il pulsante destro del mouse sul menu Dettagli su ogni processo nell'elenco dei processi del monitoraggio attività.
-
Utilizzare uno dei seguenti parametri:
-
Il comando DBCC INPUTBUFFER (spid) insieme all'ID di sessione.
-
La funzione SELECT * FROM sys.dm_exec_sql_text(sqlhandle) insieme al parametro di handle SQL corrispondente quando si utilizza l'output DMV.
-
-
Riferimenti
Per ulteriori informazioni su come aprire un monitoraggio attività in SQL Server Management Studio, visitare il seguente sito Web MSDN:
Come aprire un monitor attività in SQL Server Management StudioPer ulteriori informazioni sulla sintassi KILL, visitare il seguente sito Web MSDN:
Informazioni generali sulla sintassi KILLPer ulteriori informazioni sul sys.dm_exec_requests DMV, visitare il seguente sito Web MSDN:
Informazioni generali sul sys.dm_exec_requests DMVPer ulteriori informazioni sul sys.dm_exec_sql_text DMV, visitare il seguente sito Web MSDN:
Informazioni generali sul sys.dm_exec_sql_text DMVPer ulteriori informazioni sul comando DBCC INPUTBUFFER, visitare il seguente sito Web MSDN:
Informazioni generali sul comando DBCC INPUTBUFFERPer altre informazioni sul modello di manutenzione incrementale per SQL Server, fare clic sul numero dell'articolo seguente per visualizzare l'articolo della Microsoft Knowledge Base:
935897 Un modello di manutenzione incrementale è disponibile dal team SQL Server per fornire aggiornamenti rapidi per i problemi segnalatiPer altre informazioni sullo schema di denominazione per gli aggiornamenti SQL Server, fare clic sul numero dell'articolo seguente per visualizzare l'articolo della Microsoft Knowledge Base:
822499 Nuovo schema di denominazione per Microsoft SQL Server pacchetti di aggiornamenti softwarePer altre informazioni sulla terminologia di aggiornamento software, fare clic sul numero dell'articolo seguente per visualizzare l'articolo della Microsoft Knowledge Base:
824684 Descrizione della terminologia standard utilizzata per descrivere gli aggiornamenti software Microsoft