挿入中のコンピューター/サーバーが仮想の場合に、CMDB CI の挿入時にキー「PRIMARY」のエントリが重複する。Issue <!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } 手動、ディスカバリーツール、またはその他のインポートのいずれかで CMDB にコンピューター/サーバー CI を挿入しているときに、CI が既に挿入されているために挿入に失敗したことに関連する SQL レベルでエラーが表示される場合があります。挿入の一部として、または挿入に応答して実行される他のコードは、期待どおりに機能しない場合があります。 例: FAILED TRYING TO EXECUTE ON CONNECTION nn: INSERT INTO cmdb (`a_str_5`, `a_int_8`, `skip_sync`, `operational_status....java.sql.BatchUpdateException: Duplicate entry '7caaf9c31b9dff846825a64fad4bcb6a' for key 'PRIMARY' : java.sql.SQLException: java.sql.BatchUpdateException: Duplicate entry '7caaf9c31b9dff846825a64fad4bcb6a' for key 'PRIMARY': com.glide.db.StatementBatcher.getSQLException(StatementBatcher.java:469) Release<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } ディスカバリーまたはサービスマッピングがインストールされている任意のインスタンス。 Cause<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } CI 関係の挿入のために実行されているカスタムビジネスルールが存在する可能性があります。これは、親 CI が存在する前に更新を行います。これにより、早期挿入が発生し、その後、トランザクションの一部として実行されている他のものは、おそらくさまざまな見事に予期しない方法で動作します。説明しましょう: 挿入される CI がコンピューター [cmdb_ci_computer]、サーバー、またはコンピューターを拡張するその他のクラスである場合は、すぐに利用可能な ビジネスルール「仮想コンピューターチェック」が実行されます。これは コンピューター CI の挿入前に実行されます。これは、挿入前に「IsVirtual」フラグを追加する必要があるためです。これにより VM インスタンスレコードが見つかった場合、その CI が仮想であることがわかり、VM とインスタンスの間に「インスタンス化」関係が 作成されます。関係レコードが挿入されます。関係レコード [cmdb_rel_ci] のすべての挿入ビジネスルールは、関係レコードが挿入されると実行されます。カスタムビジネスルールが関係の親に対して .update() を作成し、早期挿入を引き起こした場合 コンピューター CI がまだ挿入されていないためです。残りの関係挿入ビジネスルールが完了します。挿入前の残り コンピューター CI ビジネスルールが完了しました。これで 実際のコンピューター CI の挿入が行われるはずですが、sys_idが既に挿入されているためエラーが発生しました。 Resolution<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } 関係レコードが挿入された時点で親 CI と子 CI の両方が存在すると想定することはできません。「仮想コンピューター チェック」は、CI の前に関係を挿入するコードの一例にすぎず、おそらく他にもあります。 この状況では、他の初期設定のコードでは対応できないため、早期挿入は発生しないようにする必要があります。 カスタム実装では、これらのファクトを考慮に入れるように再設計する必要があります。 Related Links<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } 存在しないレコードの取得によって新しい GlideRecord が初期化されるのは常にプラットフォームの動作です。この場合のように、参照レコードのオブジェクトを取得するためにスクリプトで参照フィールドをドット連結する場合も同様です。それ以降に更新すると、挿入が発生します。 この挿入動作は、 ドキュメント (サーバー API) の update(): "行われた変更で GlideRecord を更新します。レコードが存在しない場合は挿入されます"