Prime Infrastructure 3.9: Unable to delete device due to constraint violation on InterfaceTemplate table CSCvq10346

Heute durfte ich bei einer Cisco Prime Infrstructure 3.9 Instanz  den Bug CSCvq10346 troubleshooten.

 

Entgegen der „known affected Releases“ scheint dieser Bug auch auf anderen Prime Version aufzutreten, oder wurde seit 3.5 zu 3.9 mitgezogen.

 

 

Konkret sieht der Fall so aus. Möchte man ein Device  aus der Datenbank löschen:

 

Erscheint folgender Fehler

 

 

Schaut man sich das erwähnte ifm_inventory.log an:

2022-02-22 16:56:12,966 [ThreadManager-BackgroundThreads-8] INFO  logging - IFM InventoryService info Error in deleting - XXXXX: could not execute batch; SQL [delete from InterfaceTemplate where ID=?]; constraint [WCSDBA.FK6258C1643DEF40C5]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute batch.
[root@prime01 logs]#

 

Sieht es so aus, als könnte der Datensatz, aufgrund einer fehlerhaften Referenz nicht entfernt werden. Der entscheidende Hinweis ist hier wohl, folgender Ausschnitt:

SQL [delete from InterfaceTemplate where ID=?]; constraint [WCSDBA.FK6258C1643DEF40C5];

 

Prime bietet glücklicherweise ein Diagnose tool, um SQL Queries abzusetzen, somit muss man vorerst nicht per SSH auf die unübersichtliche Shell

 

https://prime/webacs/ncsDiag.do

 

Diag Tool aktivieren: 

prime01/admin# ncs run diag -deploy

 

 

Danach gelangt man auf eine rudimentäre Seite, wo sich SQL Queries absetzen lassen:

 

https://prime/ncsdiag/dbQueryAction.do

 

 

Hierzu eignet sich eine Abfrage über der Tabelle ProtocolEndPoint wo owningentityid dem Gerätenamen entspricht.

 

Ist der Gerätenamen als DNS erfasst:

select * from ProtocolEndPoint where owningentityid like ‚%GERAETENAME‘

 

Ist der Gerätenamen als IP erfasst:

select * from ProtocolEndPoint where owningentityid like ‚“%192.168.1.1‘

 

Wichtig ist, dass „%…“ verwendet wird, da vor dem Devicename eine ID steht.

 

Um rauszufinden, ob CSCvq10346 hier zutrifft, sucht man nach Datenstätzen, welche „„INTERFACETEMPLATE_ID“  != „null““ besitzen.

 

 

 

 

 

Um die Referenzen aus der „„INTERFACETEMPLATE_ID“  zu entfernen, muss man via Root Shell ein SQL Update/Delete ausführen.

Wie man auf die Root shell gelangt, wird zB. hier beschrieben Cisco Prime Root-shell

 

ade #
ade # sudo su -
Last login: Tue Feb 22 09:42:38 CET 2022 on pts/4

[root@prime01 ~]# cd /opt/CSCOlumos/bin/

[root@prime01 bin]# ./sql_execution.sh "Update ProtocolEndPoint set INTERFACETEMPLATE_ID=null where owningentityid like '%xxxxxx' and INTERFACETEMPLATE_ID is not null;"

46 rows updated.

[root@prime01 bin]# ./sql_execution.sh "delete from INTRFCTMPLT_INTERFACENAME where INSTANCEID in (Select ID from INTERFACETEMPLATE where owningentityid like '%sxxxxx');"

46 rows deleted.

[root@prime01 bin]#

 

im wesentlichen passiert hier folgendes:

Update (die Tabelle) ProtocolEndPoint (mit dem parameter) set INTERFACETEMPLATE_ID=null (aber nur da wo) where owningentityid (sowas steht wie) like ‚%xxxxxx‘ (und) and (die Tabelle) INTERFACETEMPLATE_ID (nicht Null ist) is not null;

 

Ob die Condition erfüllt wurde, sieht man über die Anzahl Einträge die bearbeitet wurden:

46 rows updated.

 

Wichtig: 

%xxxxxx‘ matched alles worin der String nachfolgend vorkommen. Dies kann Vorteile aber auch Nachteile haben. 

 

Beispiel:

%Switch1

würde ebenfalls folgende Devices matchen

Switch11

Switch12

Switch13

 

Prinzipiell macht die Referenz im INTERFACETEMPLATE_ID (Zumindes in meinem Fall), keinen Sinn. wodurch es praktisch war, gleich einen ganzen Batch zu matchen.

 

 

Nun sollten sich die Geräte im GUI löschen lassen.

 

Alternativ kann auch direkt auf die Datenbank connected werden.

cd /opt/CSCOlumos/bin
./getDatabaseParams.sh => getDB password
su - oracle
. ./oracleenv
sqlplus / as sysdba
connect
username : wcsdba
password : generated from script above

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Samuel Heinrich
Senior Network Engineer at Selution AG (Switzerland)
Arbeitet in Raum Basel (Switzerland) als Senior Network Engineer mit über 15 Jahren Erfahrung im Bereich Netzwerk

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.