Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article vous aide à résoudre un problème dans lequel vous ne pouvez pas afficher les éléments supprimés dans la console Service Manager et recevoir l’erreur SQL Server 8623 dans le journal des événements.
Version du produit d’origine : System Center Service Manager, version 1807, System Center Service Manager, version 1801, System Center 2016 Service Manager
Numéro de base de connaissances d’origine : 4480420
Symptôme
Dans la console System Center Service Manager, lorsque vous sélectionnez Éléments supprimés par l’administration>, vous recevez le message d’erreur suivant :
Message : une erreur s’est produite lors du chargement des éléments.
Microsoft.EnterpriseManagement.UI.ViewFramework.AdvancedListSupportException : l’adaptateur complet a levé une exception. Consultez la propriété FullUpdate pour voir l’exception.
sur Microsoft.EnterpriseManagement.UI.ViewFramework.AdvancedListSupportAdapter.DoAction(Requête DataQueryBase, IList'1 dataSources, IDictionary'2, entrées IList'1, String outputCollectionName)
sur Microsoft.EnterpriseManagement.UI.DataModel.QueryQueue.StartExecuteQuery(Expéditeur d’objet, ConsoleJobEventArgs e)
sur Microsoft.EnterpriseManagement.ServiceManager.UI.Console.ConsoleJobExceptionHandler.ExecuteJob(composant IComponent, EventHandler'1 job, Object Sender, ConsoleJobEventArgs args)
En outre, l’erreur SQL Server suivante est enregistrée dans le journal des événements :
- Msg 8623, Niveau 16, État 1, Ligne 3
Ressources internes du processeur de requêtes insuffisantes. Cette erreur se produit rarement et uniquement avec des requêtes extrêmement complexes ou qui référencent un grand nombre de tables ou de partitions. Simplifiez la requête. Si vous pensez que vous avez reçu ce message par erreur, contactez le support technique pour plus d'informations.
Cause
Lorsque vous ouvrez la vue Éléments supprimés, une requête SQL qui contient de nombreuses instructions UNION ALL est exécutée. Ce problème se produit s’il existe plus de 600 types de classes dérivés d’éléments de configuration.
Pour vérifier cette situation, exécutez la requête SQL suivante et vérifiez le nombre de lignes retournées dans le résultat :
ViewsDerivedFromConfigurationItem.sql
--Views derived from Configuration Item
use ServiceManager
go
select v.name
from sys.all_columns c
inner join sys.all_views v on c.object_id=v.object_id
where c.name like 'ObjectStatus_4AE3E5FE_BC03_1336_0A45_80BF58DEE57B'
order by 1
Résolution 1
Sauvegardez les bases de données, puis exécutez les scripts PowerShell suivants dans un serveur d’administration pour simuler la vue Éléments supprimés.
Note
RemoveDeletedItem.ps1 supprime un seul élément supprimé. RestoreDeletedItems.ps1 restaure plusieurs éléments en même temps.
RemoveDeletedItem.ps1
#Import-Module SMlets
$sqlInstance=(Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\System Center\2010\Common\Database").DatabaseServerName
$smDbName=(Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\System Center\2010\Common\Database").DatabaseName
#-------------------------------------------------
$SqlQuery="--Objects in DeletedItems view
create table #ResultTable_DeletedItems (Name nvarchar(max) null, Class nvarchar(max) null, Path nvarchar(max) null, TypeName nvarchar(256) null, FullName nvarchar(max) null, BaseManagedEntityId uniqueidentifier not null)
declare @viewName sysname, @sql nvarchar(max),@ParmDefinition nvarchar(max),@retval bigint
declare c cursor read_only forward_only for
select v.name
from sys.all_columns c
inner join sys.all_views v on c.object_id=v.object_id
where c.name like 'ObjectStatus_4AE3E5FE_BC03_1336_0A45_80BF58DEE57B'
order by 1
open c
while 1=1
begin
fetch c into @viewName
if @@FETCH_STATUS<>0 break
set @sql='
insert #ResultTable_DeletedItems
select mtv.DisplayName as Name, LTValue as Class, Path, mt.TypeName, bme.FullName, bme.BaseManagedEntityId
from ' + @viewName + ' mtv inner join BaseManagedEntity bme on mtv.BaseManagedEntityId=bme.BaseManagedEntityId inner join ManagedType mt on bme.BaseManagedTypeId=mt.ManagedTypeId
inner join LocalizedText lt on mt.ManagedTypeId=lt.LTStringId and LanguageCode=''ENU'' and LTStringType=1
where mtv.ObjectStatus_4AE3E5FE_BC03_1336_0A45_80BF58DEE57B = ''47101E64-237F-12C8-E3F5-EC5A665412FB''
'
exec sp_executesql @sql
end
close c
deallocate c
select * from #ResultTable_DeletedItems
drop table #ResultTable_DeletedItems"
$cnt=0
Write-Host "Please wait while Deleted Items are listed. $(Get-Date)"
"************************************************"
$ConnectionString="Server=$sqlInstance;Database=$smDbName;Integrated Security=True"
$SqlConnection = new-object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = $ConnectionString
$SqlCommand = $SqlConnection.CreateCommand()
$SqlCommand.CommandText = $SqlQuery
$dt = New-Object System.Data.DataTable
$da = New-Object System.Data.SqlClient.SqlDataAdapter -ArgumentList $SqlCommand
[void]$da.fill($dt)
$rows=$dt.Rows
#-------------------------------------------------
$selectedDeletedItem= ($rows | Out-GridView -Title 'Select a single Deleted Item to REMOVE' -OutputMode Single)
if ($selectedDeletedItem)
{
$Confirm = Read-Host "Deleted configuration items that are removed lose all history and relationships. Do you want to remove the selected configuration item? Type YES to confirm."
if ($Confirm -ne "YES") {Write-Host "Exiting..."; exit}
$itemRestored= Get-SCSMObject -Id $selectedDeletedItem.BaseManagedEntityId
$itemRestored | Remove-SCSMObject -Force
Write-Host "Selected item below has been REMOVED:"
$selectedDeletedItem
}
else
{
Write-Host "No item selected to remove."
}
RestoreDeletedItems.ps1
#Import-Module SMlets
$sqlInstance=(Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\System Center\2010\Common\Database").DatabaseServerName
$smDbName=(Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\System Center\2010\Common\Database").DatabaseName
#-------------------------------------------------
$SqlQuery="--Objects in DeletedItems view
create table #ResultTable_DeletedItems (Name nvarchar(max) null, Class nvarchar(max) null, Path nvarchar(max) null, TypeName nvarchar(256) null, FullName nvarchar(max) null, BaseManagedEntityId uniqueidentifier not null)
declare @viewName sysname, @sql nvarchar(max),@ParmDefinition nvarchar(max),@retval bigint
declare c cursor read_only forward_only for
select v.name
from sys.all_columns c
inner join sys.all_views v on c.object_id=v.object_id
where c.name like 'ObjectStatus_4AE3E5FE_BC03_1336_0A45_80BF58DEE57B'
order by 1
open c
while 1=1
begin
fetch c into @viewName
if @@FETCH_STATUS<>0 break
set @sql='
insert #ResultTable_DeletedItems
select mtv.DisplayName as Name, LTValue as Class, Path, mt.TypeName, bme.FullName, bme.BaseManagedEntityId
from ' + @viewName + ' mtv inner join BaseManagedEntity bme on mtv.BaseManagedEntityId=bme.BaseManagedEntityId inner join ManagedType mt on bme.BaseManagedTypeId=mt.ManagedTypeId
inner join LocalizedText lt on mt.ManagedTypeId=lt.LTStringId and LanguageCode=''ENU'' and LTStringType=1
where mtv.ObjectStatus_4AE3E5FE_BC03_1336_0A45_80BF58DEE57B = ''47101E64-237F-12C8-E3F5-EC5A665412FB''
'
exec sp_executesql @sql
end
close c
deallocate c
select * from #ResultTable_DeletedItems
drop table #ResultTable_DeletedItems"
$cnt=0
Write-Host "Please wait while Deleted Items are listed. $(Get-Date)"
"************************************************"
$ConnectionString="Server=$sqlInstance;Database=$smDbName;Integrated Security=True"
$SqlConnection = new-object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = $ConnectionString
$SqlCommand = $SqlConnection.CreateCommand()
$SqlCommand.CommandText = $SqlQuery
$dt = New-Object System.Data.DataTable
$da = New-Object System.Data.SqlClient.SqlDataAdapter -ArgumentList $SqlCommand
[void]$da.fill($dt)
$rows=$dt.Rows
#-------------------------------------------------
$selectedDeletedItems= ($rows | Out-GridView -Title 'Select Deleted Item(s) to RESTORE' -passthru )
if ($selectedDeletedItems)
{
$Confirm = Read-Host "This will restore the selected configuration items. Do you want to continue? Type Y to confirm."
if ($Confirm -ne "Y") {Write-Host "Exiting..."; exit}
$Active = Get-SCSMEnumeration System.ConfigItem.ObjectStatusEnum.Active$
foreach($selectedDeletedItem in $selectedDeletedItems)
{
$itemRestored= Get-SCSMObject -Id $selectedDeletedItem.BaseManagedEntityId
$itemRestored | set-scsmobject -property ObjectStatus -value $Active
}
Write-Host "Selected item(s) below has been restored:"
$selectedDeletedItems
}
else
{
Write-Host "No item selected to restore."
}
Résolution 2
Créez des vues de console spéciales en procédant comme suit :
- Créez une vue console dans la barre wunderbar des éléments de configuration.
- Recherchez un type de classe spécifique autre que Les éléments de configuration, par exemple Ordinateur Windows. Vous pouvez faire référence à la colonne Class retournée par RestoreDeletedItems.ps1 pour les types de classes disponibles.
- Modifier les critères en [Élément de configuration]. L’état de l’objet est égal à La suppression en attente.
- Dans la section Affichage , sélectionnez au moins les colonnes Nom et Chemin d’accès . Vous pouvez également sélectionner d’autres colonnes spécifiques au type de classe.
- Supprimez ou restaurez les éléments supprimés répertoriés.
Résolution 3
Supprimez les packs d’administration inutilisés pour réduire le nombre total de types de classes dérivées.
Important
Soyez prudent lorsque vous supprimez des packs d’administration. Nous vous recommandons de créer une sauvegarde et de tester dans un environnement de test avant de le faire dans l’environnement de production.
Pour rechercher le nombre de types de classes dérivés que chaque pack d’administration contient, exécutez la requête SQL suivante :
-- Order the management packs by the number of derived configuration items class types
select MP.MPName, count(1) as TotalConfigurationItemClassTypes from ManagedType MT
inner join ManagementPack as MP on MT.ManagementPackId = MP.ManagementPackId
where ManagedTypeTableName in (select TABLE_NAME from INFORMATION_SCHEMA.columns where column_name like '%AssetStatus_B6E7674B_684A_040D_30B8_D1B42CCB3BC6%'
) and ManagedTypeTableName is not null
group by MP.MPName
order by count(1) desc
Plus d’informations
Lorsque vous supprimez des objets ordinateur, ne supprimez pas les objets ordinateur des serveurs d’administration. Sinon, les flux de travail Service Manager cesseront de fonctionner et vous devrez restaurer la base de données Service Manager dans une sauvegarde précédente.