Home users: This article is only intended for technical support agents and IT professionals. If you're looking for help with a problem, please ask the Microsoft Community.
Symptoms
This article discusses how to troubleshoot the “801 Missing %ObjectType” and “VmmAdminUI has stopped working” errors in the System Center Virtual Machine Manager (SCVMM) Console. These 801 errors are triggered by communication issues, database corruption, deleted files, or concurrent changes in Hyper-V.
The following are common errors that are logged in the Jobs view in the Virtual Machine Manager (VMM) Console:
- When there's an 801 Missing Object:
For example:Error
Description
Recommended action
801
VMM cannot find %ObjectType; object %FriendlyName;.
Make sure that the library object is valid, and then try the operation again.
Error (801)
VMM cannot find VM object ObjectID.
Recommended Action
Ensure the library object is valid, and then try the operation again.
Additionally, the following error is logged in a SCVMM ETL trace:*** Carmine error was: LibObjectNotFound (801) - You receive the following error messages when a virtual machine (VM) refresh job fails:
- VMM cannot find VM object:
- VMM cannot find ISO object:
- VMM cannot find VirtualHardDisk:
- VMM cannot find VM object:
- You receive the following error message when you try to open the properties of a VM that has an 801 issue:
The following information is displayed when you view problem details for the error or when you view the Windows Error Reporting log in MSINFO32:
Note When a virtual machine is in a failed state via an 801 error, you cannot delete it from the console. - You may receive the following error message: Error (20413)
VMM encountered a critical exception and created an exception report at C:\ProgramData\VMMLogs\SCVMM.
Cause
Resolution
To resolve this issue, delete the orphaned objects from the database by following these steps:
- Determine whether the virtual machine is located on the host and if it's running or is stopped.
If the VM is located on the host but cannot be started, verify that the Object identified in the error message exists. For example, if the error states that it cannot find the virtual hard disk, navigate to the location where the hard disk is supposed to be stored, and then go to step 2.
If you don't know where the VHDX file is located, and the virtual machine is in a running state, run Get-SCVirtualMachine -VMMServer localhost -Name "<VMNAME>" in PowerShell on the SCVMM server, and then view the VM’s VHDX location in the “location" line.
If the VHDx file is not in that location, that's the problem.
If the VHDx is in that location, and the VM can be started in Hyper-V, go to step 2 to resolve the issue in the VMMAdminUI.
- Run get-scvirtualmachine <VMNAME> | Remove-scvirtualmachine –force to remove the VM from the VMM Console.
Note THIS DOES NOT DELETE THE VM FILES.
If the VM is removed from the SCVMM console, right-click the host, and then click Refresh Virtual Machines. Or, close and reopen the console.
If the PowerShell command does not work, you must remove the VM from the SQL VirtualMachineDB database by running a script.
Important BACK UP THE VMM DATABASE before you do ANYTHING.
To determine where the SCVMM database is being hosted from, go to Settings, and then click General. The database connection is shown as follows: - In SQL Server Management Studio on the SQL server that hosts the SCVMM database, open the SQL instance. In the Databases folder on the left, select VirtualManagerDB (or whatever the database was renamed as), and make sure that the name of the database is listed in the drop-down list on the toolbar. Select New Query, and then paste the following script into the query field:
BEGIN TRANSACTION T1DECLARE custom_cursor CURSOR FORSELECT ObjectId fromdbo.tbl_WLC_VObject WHERE [Name] = 'VMName'DECLARE @ObjectId uniqueidentifierOPEN custom_cursorFETCH NEXT FROM custom_cursor INTO @ObjectIdWHILE(@@fetch_status = 0)BEGINDECLARE vdrive_cursor CURSOR FORSELECT VDriveId, VHDId, ISOId fromdbo.tbl_WLC_VDrive WHERE ParentId = @ObjectIdDECLARE @VDriveId uniqueidentifierDECLARE @VHDId uniqueidentifierDECLARE @ISOId uniqueidentifier OPEN vdrive_cursorFETCH NEXT FROM vdrive_cursor INTO @VDriveId, @VHDId, @ISOIdWHILE(@@fetch_status = 0)BEGIN DELETE FROM dbo.tbl_WLC_VDrive WHERE VDriveId = @VDriveId if(@VHDId is NOT NULL) BEGIN DELETE FROM dbo.tbl_WLC_VHD WHERE VHDId = @VHDId DELETE FROM dbo.tbl_WLC_PhysicalObject WHERE PhysicalObjectId = @VHDId END if(@ISOId is NOT NULL) BEGIN DELETE FROM dbo.tbl_WLC_ISO WHERE ISOId = @ISOId DELETE FROM dbo.tbl_WLC_PhysicalObject WHERE PhysicalObjectId = @ISOId END FETCH NEXT FROM vdrive_cursor INTO @VDriveId, @VHDId, @ISOId ENDCLOSE vdrive_cursorDEALLOCATE vdrive_cursor-----------------DECLARE floppy_cursor CURSOR FORSELECT VFDId, vFloppyId fromdbo.tbl_WLC_VFloppy WHERE HWProfileId = @ObjectIdDECLARE @vFloppyId uniqueidentifierDECLARE @vfdId uniqueidentifierOPEN floppy_cursorFETCH NEXT FROM floppy_cursor INTO @vfdId, @vFloppyIdWHILE(@@fetch_status = 0)BEGIN DELETE FROM dbo.tbl_WLC_VFloppy WHERE VFloppyId = @vFloppyId if(@vfdid is NOT NULL) BEGIN DELETE FROM dbo.tbl_WLC_VFD WHERE VFDId = @vfdId DELETE FROM dbo.tbl_WLC_PhysicalObject WHERE PhysicalObjectId = @vfdId END FETCH NEXT FROM floppy_cursor INTO @vfdId, @vFloppyId ENDCLOSE floppy_cursorDEALLOCATE floppy_cursor----------------DECLARE checkpoint_cursor CURSOR FORSELECT VMCheckpointId fromdbo.tbl_WLC_VMCheckpoint WHERE VMId = @ObjectIdDECLARE @vmCheckpointId uniqueidentifierOPEN checkpoint_cursorFETCH NEXT FROM checkpoint_cursor INTO @vmCheckpointId WHILE(@@fetch_status = 0)BEGIN DELETE FROM dbo.tbl_WLC_VMCheckpointRelation WHERE VMCheckpointId = @vmCheckpointId FETCH NEXT FROM checkpoint_cursor INTO @vmCheckpointId ENDCLOSE checkpoint_cursorDEALLOCATE checkpoint_cursor----------------------------------Clean checkpointDELETE FROM dbo.tbl_WLC_VMCheckpointWHERE VMId = @ObjectID exec [dbo].[prc_VMMigration_Delete_VMInfoAndLUNMappings] @ObjectId DECLARE @RefreshId uniqueidentifier DELETE FROM dbo.tbl_WLC_VAdapterWHERE HWProfileId = @ObjectId DELETE FROM dbo.tbl_WLC_VNetworkAdapterWHERE HWProfileId = @ObjectId DELETE FROM dbo.tbl_WLC_VCOMPortWHERE HWProfileId = @ObjectId DELETE FROM dbo.tbl_WLC_HWProfile WHERE HWProfileId = @ObjectId DELETE FROM dbo.tbl_WLC_VMInstance WHERE VMInstanceId = @ObjectIdDELETE FROM dbo.tbl_WLC_VObjectWHERE ObjectId = @ObjectId FETCH NEXT FROM custom_cursor INTO @ObjectId ENDCLOSE custom_cursorDEALLOCATE custom_cursorCOMMIT TRANSACTION T1
The only modification that you have to make in this script is in the fourth line, where you'll change "VMNAME" to the name of the VM you want to remove, still using single quotation marks. Then, you can run the script, and it will return a series of rows that are affected as follows.
Note THIS DOES NOT DELETE THE VM FILES. - Return to the SCVMM UI. You may see two instances of the VM that you ran the SQL script against. Right-click the host, and then click Refresh Virtual Machines. Or, you may have to close and reopen the console to reread the database.