仮想マシン マネージャー コンソールから不足している仮想マシンを削除する方法

この記事では、Microsoft SQL Server スクリプトを使用して、状態が [不足] の仮想マシンを仮想マシン マネージャー コンソールから削除する方法について説明します。

元の製品バージョン:System Center 2016 Virtual Machine Manager、Microsoft System Center 2012 R2 Virtual Machine Manager、System Center Virtual Machine Manager、バージョン 1801、System Center Virtual Machine Manager、バージョン 1807
元の KB 番号: 3102955

概要

クラスターのフェールオーバー後に、重複する仮想マシンがMicrosoft System Center Virtual Machine Manager (VMM) 管理者コンソールに表示されることがあります。 これらの仮想マシンの 1 つの状態は Missing で、もう一方の仮想マシンの状態は異なります。 不足している仮想マシンの削除が困難な場合があります。 この記事には、不足している仮想マシンを削除するSQL Server スクリプトが含まれています。

注:

このスクリプトは、状態が Missing の仮想マシンをすべて VMM データベースから削除します。 スクリプトは、どのホスト コンピューターからも仮想マシンを削除しません。 これには、Hyper-V、Virtual Server、および VMware ベースのすべてのホストが含まれます。

システムを準備する

システムを準備してスクリプトを実行するには、次の手順に従います。

  1. VMM 管理者コンソールを閉じます。

  2. VMM サーバーで VMMService という名前の Windows サービスを停止します。

  3. VMM データベースの完全バックアップを作成します。

  4. VMM データベースが格納されているコンピューターに Microsoft SQL Server Management Studioをインストールします。

    ヒント

    SQL Server Management Studioは、ダウンロード SQL Server Management Studio (SSMS) から入手できる Microsoft からの無料ダウンロードです。

  5. SQL Server Management Studio開き、VMM データベースを選択し、SQL Server スクリプトを実行します。 これにより、不足しているすべての仮想マシンが VMM データベースから削除されます。 スクリプトが成功すると、次の出力が表示されます。

    コマンドが正常に完了しました。

  6. SQL Server スクリプトが実行されたら、VMMService を再起動し、VMM 管理者コンソールを開いて、不足している仮想マシンが削除されていることを確認します。

SQL Server スクリプト

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