VPXDがERROR: duplicate key value violates unique constraint "pk_nfle_file_info"によりクラッシュする
search cancel

VPXDがERROR: duplicate key value violates unique constraint "pk_nfle_file_info"によりクラッシュする

book

Article ID: 418697

calendar_today

Updated On:

Products

VMware vCenter Server

Issue/Introduction

免責事項:これは英文の記事「VPXD crashes due to ERROR: duplicate key value violates unique constraint "pk_nfle_file_info"」の日本語訳です。記事はベストエフォートで翻訳を進めているため、ローカライズ化コンテンツは最新情報ではない可能性があります。最新情報は英語版の記事で参照してください。

vCenter Server データベース内の重複値が原因で VCDB がクラッシュする問題を解決します。

症状 -
VPXDがVCDB エラーでクラッシュします。

vpxd.log エントリ -

[YYYY-MM-DDTHH:MM:SS] error vpxd[58211] [Originator@6876 sub=Default opID=HB-host-434785@158686-60699ede] [Vdb::IsRecoverableErrorCode] Unable to recover from 23505:1
[YYYY-MM-DDTHH:MM:SS] error vpxd[58211] [Originator@6876 sub=Default opID=HB-host-434785@158686-60699ede] [VdbStatement] SQLError was thrown: "ODBC error: (23505) - ERROR: duplicate key value violates unique constraint "pk_nfle_file_info"
--> DETAIL: Key (vm_id, key_val)=(1285563, 0) already exists.;
--> Error while executing the query" is returned when executing SQL statement "INSERT INTO VPX_NORM_VM_FLE_FILE_INFO (VM_ID,KEY_VAL,NAME,FILE_SIZE,FILE_UNIQUESIZE,TYPE) VALUES (?,?,?,?,?,?)"

Environment

  • vCenter Server 7.0
  • vCenter Server 8.0

Cause

VCDB内の重複した値により、VPXD サービスがクラッシュします。

Resolution

注:ELM内のすべてのvCenterがシャットダウンされていることを確認し、バックアップ用に全ノードのスナップショットを作成してください。スタンドアロンのvCenterの場合は、パワーオフ状態のスナップショットで十分です。スナップショットのベストプラクティスについては、以下の記事をご覧ください。


vpxd ログから、影響を受けた VM_ID 値を特定した後、この問題を解決するには以下の手順に従う必要があります。

  1. root 権限で vCenter Server に SSH 接続します。

    VPXD サービスがまだクラッシュしていない場合は、停止します。

    # service-control --stop vpxd

  2. VCDB に接続します。

    # /opt/vmware/vpostgres/current/bin/psql -d VCDB -U postgres

  3. 次のコマンドを実行して、vpxd.log で確認した vm_id に関連付けられている VM ID を特定します。(参考情報)

    VCDB=# select id, file_name from vpx_vm where id = 1285563;
       id    |                                             file_name
    ---------+----------------------------------------------------------------------------------------------------
     1285563 | ds:///vmfs/volumes/Datastore-UUID/VM_name/VM_name.vmx
    (1 row)
  4. この問題を解決するには、vpxd.log で確認した KEY ID に関連する、テーブルから重複するエントリをすべて削除します。

    delete from VPX_COMPUTE_RESOURCE_DAS_VM where VM_ID=1285563;
    delete from VPX_COMPUTE_RESOURCE_DRS_VM where VM_ID=1285563;
    delete from VPX_COMPUTE_RESOURCE_ORC_VM where VM_ID=1285563;
    delete from VPX_VM_SGXINFO where VM_ID=1285563;
    delete from VPX_GUEST_DISK where VM_ID=1285563;
    delete from VPX_VM_VIRTUAL_DEVICE where ID=1285563;
    delete from VPX_VM_DS_SPACE where VM_ID=1285563;
    delete from VPX_NON_ORM_VM_CONFIG_INFO where ID=1285563;
    delete from VPX_NORM_VM_FLE_FILE_INFO where VM_ID=1285563;
    delete from VPX_VDEVICE_BACKING_REL where VM_ID=1285563;
    delete from VPX_VIRTUAL_DISK_IOFILTERS where VM_ID=1285563;
    delete from VPX_VM_STATIC_OVERHEAD_MAP where VM_ID=1285563;
    delete from VPX_VM_TEXT where VM_ID=1285563;
    delete from VPX_VM where ID=1285563;
    delete from VPX_ENTITY where ID=1285563;
    delete from VPX_DVPORT where connectee='vm-1285563';

    注: 一部の削除コマンドで「0 deleted」と出力されることがありますが、これは正常です。残りの削除コマンドを続行してください。
  5. VCDB から切断します。

    VCDB=# \q 
  6. VPXD サービスを起動します。

    # service-control --start vpxd

    注: 上記のコマンドで vpxd の起動に失敗した場合は、代わりにすべてのサービスを再起動してください。

    # service-control --stop --all; service-control --start --all

    別の SSH インスタンスで、VPXD サービスまたはすべてのサービスの起動を監視します。

    # watch service-control --status all

Additional Information

注:このような問題を回避するため、vCenter Server のパッチ適用/アップグレード作業中は、クラスタの DRS を「手動」に設定することをお勧めします。

影響/リスク:
:データベースの変更が含まれるため、vCenter のスナップショットとバックアップは必須です。vCenter Server のファイルベースのバックアップとリストア