CMDB 識別ペイロードエラー:「cmdb_ci...の挿入中にエラーが発生して挿入に失敗しました」で、ノードログに「接続の実行に失敗しました」「キー「XXX」のエントリ「XXX」が重複しています」と表示される。Issue <!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: #000000; } span { font-size: 12pt; font-family: Lato; color: #000000; } h2 { font-size: 24pt; font-family: Lato; color: black; } h3 { font-size: 18pt; font-family: Lato; color: black; } h4 { font-size: 14pt; font-family: Lato; color: black; } a { font-size: 12pt; font-family: Lato; color: #00718F; } a:hover { font-size: 12pt; color: #024F69; } a:target { font-size: 12pt; color: #032D42; } a:visited { font-size: 12pt; color: #00718f; } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } CI を挿入するためのペイロードが CMDB 識別および調整 API に与えられると、次のエラーが表示されることがあります。 Insertion failed with error Error during insert of <table name> このエラーには 挿入が失敗した理由はわかりません、これにはさまざまな理由があります。アプリノードのログも調べる必要があります。そこには次のようなものが表示される場合があります。 FAILED TRYING TO EXECUTE ON CONNECTION ... Duplicate entry '<some value>' for key '<column name>' 例: ディスカバリーパターンログに埋もれている場合があります。 2020-01-20 21:00:53: Identification CI Errors:Insertion failed with error Error during insert of cmdb_ci_cmp_resource (prd-standard-public-access-acl),Insertion failed with error Error during insert of cmdb_ci_cmp_resource (arn:aws:acm:us-east-1:337473618329:certificate/db68872f-d85b-4644-8aa6-83d6714a1d43),Insertion failed with error Error during insert of cmdb_ci_cmp_resource (E29TM5GDLIM2I4),Insertion failed with error Error during insert of cmdb_ci_cmp_resource (E2S7XP0RM8V8U7),Insertion failed with error Error during insert of cmdb_ci_cmp_resource (E3VS4AWE7G2OMH),Insertion failed with error Error during insert of cmdb_ci_cmp_resource (ED16G2GSDDC18),Insertion failed with error Error during insert of cmdb_ci_cmp_resource (EGE7BGIT6E1WJ),Insertion failed with error Error during insert of cmdb_ci_cmp_resource (EGGTMLZ6GJBAA),Insertion failed with error Error during insert of cmdb_ci_cmp_resource (EYUX5I1VHVCQT),Insertion failed with error Error during insert of cmdb_ci_cmp_resource (ebs-snapper-3374736... そして、それに付随するアプリノードログ:FAILED TRYING TO EXECUTE ON CONNECTION glide.21 (connpid=1331800): com.glide.db.BatchStatement$StatementContainer@dcabca,com.glide.db.BatchStatement$StatementContainer@1bc50d8java.sql.BatchUpdateException: (conn=1331800) Duplicate entry 'AWS::RDS::DBSecurityGroup' for key 'a_str_35': java.sql.SQLException: java.sql.BatchUpdateException: (conn=1331800) Duplicate entry 'AWS::RDS::DBSecurityGroup' for key 'a_str_35': com.glide.db.StatementBatcher.getSQLException(StatementBatcher.java:547)com.glide.db.StatementBatcher.commitBatch(StatementBatcher.java:502) Release<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: #000000; } span { font-size: 12pt; font-family: Lato; color: #000000; } h2 { font-size: 24pt; font-family: Lato; color: black; } h3 { font-size: 18pt; font-family: Lato; color: black; } h4 { font-size: 14pt; font-family: Lato; color: black; } a { font-size: 12pt; font-family: Lato; color: #00718F; } a:hover { font-size: 12pt; color: #024F69; } a:target { font-size: 12pt; color: #032D42; } a:visited { font-size: 12pt; color: #00718f; } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } 識別エンジンを使用して CI を挿入/更新する機能。 Cause<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: #000000; } span { font-size: 12pt; font-family: Lato; color: #000000; } h2 { font-size: 24pt; font-family: Lato; color: black; } h3 { font-size: 18pt; font-family: Lato; color: black; } h4 { font-size: 14pt; font-family: Lato; color: black; } a { font-size: 12pt; font-family: Lato; color: #00718F; } a:hover { font-size: 12pt; color: #024F69; } a:target { font-size: 12pt; color: #032D42; } a:visited { font-size: 12pt; color: #00718f; } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } 原因は次のとおりです。 CMDB フィールドに対する SQL レベルの一意制約そのフィールドには、同じ値を持つレコードが既に存在します 上記のエラー例の情報を使用すると、この場合、テーブル cmdb_ci_cmp_resourceへの挿入と、フィールド a_str_35に対する一意の制約がありますが、 これは理論的には任意の CI クラスまたはフィールドである可能性があります。 Resolution<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: #000000; } span { font-size: 12pt; font-family: Lato; color: #000000; } h2 { font-size: 24pt; font-family: Lato; color: black; } h3 { font-size: 18pt; font-family: Lato; color: black; } h4 { font-size: 14pt; font-family: Lato; color: black; } a { font-size: 12pt; font-family: Lato; color: #00718F; } a:hover { font-size: 12pt; color: #024F69; } a:target { font-size: 12pt; color: #032D42; } a:visited { font-size: 12pt; color: #00718f; } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } 実際のフィールド名を識別します 「key」が「PRIMARY」の場合、これはsys_idフィールドを意味し、これは起こってはいけません。IRE は、挿入するのではなく、sys_idが既に存在する場所を更新する必要があります。これは、データベーストリガーが正しくないことの症状である可能性があります。「キー」はエイリアスであり、実際のフィールド名ではない場合があります。 CMDB は、Jakarta バージョンから 拡張モデル を使用しています。これにより、フィールドが CMDB ツリーの別々の独立した分岐で定義されている場合に、複数のフィールドに対して SQL データベーステーブルの列を再利用できます。エイリアス列名には「a_」で始まるものもありますが (例:「a_str_35」)、他の列名は、フィールドが後で他のフィールドで再利用される前の元の実際の列名を持つ場合があります。つまり、ノードログエラーに表示される SQL レベルの列名 (キー) は、アプリケーションレベルのフィールド名と同じ名前ではなく、CMDB の他のクラスの他のアプリケーションレベルのフィールドで使用される可能性があります。辞書フィールド名と実際の SQL テーブル列の間のマッピングは、sys_storage_aliasテーブルにあります。 sys_storage_aliasのリストを開きます。フィルターオン:ストレージエイリアスが <key name in node log error>ノードログエラーの<キー名であり>テーブルが<table name from IRE error>「要素名」は、挿入する CI クラスから見たフィールド名です。 辞書でそのフィールドの一意の設定を確認する [システム定義:ディクショナリ (sys_dictionary) に移動します。フィルターオン:テーブルが<table name from IRE error>、かつ列名が<ストレージエイリアステーブルからの要素名である>そのレコードを開き、このフィールドが辞書で一意に設定されているかどうかを確認します。このフィールドが辞書で一意に設定されている場合: 一意である必要がありますか?ヘッダーメニューの [ファイルプロパティを表示] にチェックを入れます。おそらくこれは元に戻す必要があるカスタマイズですか?CMDB 内で識別フィールドを一意にすることはお勧めしません。KB0780914を参照してください。KB0780914 重複を防ぐために [CMDB/資産シリアル番号] フィールドを [一意] に設定することが得策ではない理由このフィールドにこの値を持つレコードがこのテーブルに存在するかどうかを確認します。これでエラーが説明できます。次に、同じ値を持つ別のものを挿入しようとする理由を理解する必要があります。おそらく、このレコードを挿入するのが正しいのですが、一意の制約は必要ありません。解決策は通常、一意の制約を削除することです。 ディクショナリで [一意] に設定されていない場合: CMDB の別のフィールドがこの列を共有している可能性があり、一意である必要があるため、[一意] に設定されています。そのフィールドによって追加された一意のインデックスは、一意にしたくなくても、このフィールドにも適用されます。これはバグであり、起こってはいけません。 このエイリアスを使用している他のフィールドを検索し、それぞれの辞書レコードを確認します。 sys_storage_aliasのリストを開くフィルターオン:ストレージエイリアスが <ノードログエラーのキー名>「要素名」でグループ化し、このエイリアスを共有する他のフィールド名を確認します。 一意のセットが見つかった場合、この状況での通常の解決策は、ServiceNow テクニカルサポートにサポートしてもらうことです。 代わりに共有できる、一意の制約のない同じタイプの別のフィールドを検索しますこのクラス (およびサブクラス) の各レコードについてのみ、古いフィールドから新しいフィールドにフィールド値をコピーします。この CI クラス/テーブルの新しいフィールドとすべての子クラスを使用するようにsys_db_aliasを更新します。