Borrado de máquinas virtuales en estado “Missing” en Virtual Machine Manager

Ya son varias la veces, principalmente en entorno de Cluster de Hyper-V, dónde una máquina virtual empieza a aparecer dos veces en la consola de Virtual Machine Manager, una de ellas generalmente en estado “Missing”.

En cambio desde Hyper-V Manager no se detecta ningún comportamiento erróneo.

Ni los acciones de Reparar ni de Borrado lanzadas desde Virtual Machine Manager sobre la máquina en estado “Missing” finalizan con éxito, reportando principalmente dos tipos de error.

Error (2915):

image thumb Borrado de máquinas virtuales en estado “Missing” en Virtual Machine Manager

Error (802):

image thumb1 Borrado de máquinas virtuales en estado “Missing” en Virtual Machine Manager

Un procedimiento que hasta el momento siempre me ha funcionado es atacar a la BBDD de Virtual Machine Manager con un script de Base de Datos ejecutado desde la herramienta Microsoft SQL Server Management Studio Express.

Antes de ejecutar el Script tendremos que parar el servicio de Virtual Machine Manager en el propio servidor de VMM.

Hay que añadir que es un Script proporcionado, aunque no soportado [disclaimer], por Microsoft, que se puede encontrar junto con el procedimiento completo de ejecución en esta página de Technet.

Para finalizar os incluyo el código del Script:

BEGIN TRANSACTION T1

DECLARE custom_cursor CURSOR FOR
SELECT ObjectId from
dbo.tbl_WLC_VObject WHERE [ObjectState] = 220
DECLARE @ObjectId uniqueidentifier
OPEN custom_cursor
FETCH NEXT FROM custom_cursor INTO @ObjectId
WHILE(@@fetch_status = 0)
BEGIN
DECLARE vdrive_cursor CURSOR FOR
SELECT VDriveId, VHDId, ISOId from
dbo.tbl_WLC_VDrive WHERE ParentId = @ObjectId
DECLARE @VDriveId uniqueidentifier
DECLARE @VHDId uniqueidentifier
DECLARE @ISOId uniqueidentifier

OPEN vdrive_cursor
FETCH NEXT FROM vdrive_cursor INTO @VDriveId, @VHDId, @ISOId
WHILE(@@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
   END
CLOSE vdrive_cursor
DEALLOCATE vdrive_cursor
-----------------
DECLARE floppy_cursor CURSOR FOR
SELECT VFDId, vFloppyId from
dbo.tbl_WLC_VFloppy WHERE HWProfileId = @ObjectId
DECLARE @vFloppyId uniqueidentifier
DECLARE @vfdId uniqueidentifier
OPEN floppy_cursor
FETCH NEXT FROM floppy_cursor INTO @vfdId, @vFloppyId
WHILE(@@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
   END
CLOSE floppy_cursor
DEALLOCATE floppy_cursor
----------------
DECLARE checkpoint_cursor CURSOR FOR
SELECT VMCheckpointId from
dbo.tbl_WLC_VMCheckpoint WHERE VMId = @ObjectId
DECLARE @vmCheckpointId uniqueidentifier
OPEN checkpoint_cursor
FETCH 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
   END
CLOSE checkpoint_cursor
DEALLOCATE checkpoint_cursor
-------------------------
---------Clean checkpoint
DELETE FROM dbo.tbl_WLC_VMCheckpoint
WHERE VMId = @ObjectID

        exec [dbo].[prc_VMMigration_Delete_VMInfoAndLUNMappings] @ObjectId
        DECLARE @RefreshId uniqueidentifier
        exec [dbo].[prc_RR_Refresher_Delete] @ObjectId, @RefreshId

        DELETE FROM dbo.tbl_WLC_VAdapter
WHERE HWProfileId = @ObjectId

        DELETE FROM dbo.tbl_WLC_VNetworkAdapter
WHERE HWProfileId = @ObjectId
               
        DELETE FROM dbo.tbl_WLC_VCOMPort
WHERE HWProfileId = @ObjectId
        DELETE FROM dbo.tbl_WLC_HWProfile
        WHERE HWProfileId = @ObjectId
        DELETE FROM dbo.tbl_WLC_VMInstance
        WHERE VMInstanceId = @ObjectId
DELETE FROM dbo.tbl_WLC_VObject
WHERE ObjectId = @ObjectId
    FETCH NEXT FROM custom_cursor INTO @ObjectId
  END
CLOSE custom_cursor
DEALLOCATE custom_cursor
COMMIT TRANSACTION T1

share save 171 16 Borrado de máquinas virtuales en estado “Missing” en Virtual Machine Manager

Leave a Reply