仮想マシン マネージャー コンソールから不足している仮想マシンを削除する方法
この記事では、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 ベースのすべてのホストが含まれます。
システムを準備する
システムを準備してスクリプトを実行するには、次の手順に従います。
VMM 管理者コンソールを閉じます。
VMM サーバーで VMMService という名前の Windows サービスを停止します。
VMM データベースの完全バックアップを作成します。
VMM データベースが格納されているコンピューターに Microsoft SQL Server Management Studioをインストールします。
ヒント
SQL Server Management Studioは、ダウンロード SQL Server Management Studio (SSMS) から入手できる Microsoft からの無料ダウンロードです。
SQL Server Management Studio開き、VMM データベースを選択し、SQL Server スクリプトを実行します。 これにより、不足しているすべての仮想マシンが VMM データベースから削除されます。 スクリプトが成功すると、次の出力が表示されます。
コマンドが正常に完了しました。
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
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示