Datenbankdeadlockproblem mit Implementierungen großer Lösungen

Wenn Sie versuchen, eine große Lösung zu implementieren, wird im IBM® FileNet P8-Serverfehlerprotokoll möglicherweise ein Datenbankdeadlockfehler generiert.

Symptome

Sie versuchen, eine große Lösung zu implementieren, und im IBM FileNet P8-Serverfehlerprotokoll wird ein Datenbankdeadlockfehler generiert, beispielsweise der folgende Fehler: 013-07-12T16:48:33.293 19F319F3 ENG FNRCE0019E - ERROR method name: throwEngineException principal name: Administrator Global Transaction: true User Transaction: false Exception Info: The operation could not be completed due to a deadlock error. A retry might be appropriate. ObjectStore: "CMTOS", SQL: ""ALTER TABLE CMTOS.Container ADD (u2586_dub_hvlointeger67 number(10) NULL) "" com.filenet.api.exception.EngineRuntimeException: FNRCE0019E: E_DEADLOCK_ERROR: The operation could not be completed due to a deadlock error. A retry might be appropriate. ObjectStore: "CMTOS", SQL: ""ALTER TABLE CMTOS.Container ADD (u2586_dub_hvlointeger67 number(10) NULL) "" failedBatchItem=42
at com.filenet.engine.dbpersist.DBOracleContext.throwEngineException(DBOracleContext.java:335)
at com.filenet.engine.dbpersist.DBExecutionElement.execute(DBExecutionElement.java:296)
at com.filenet.engine.dbpersist.DBExecutionContext.getNextResult(DBExecutionContext.java:106)
at com.filenet.engine.dbpersist.DBStatementList.executeStatements(DBStatementList.java:161)
at com.filenet.engine.dbpersist.DBStatementList.getNextResult(DBStatementList.java:601)
at com.filenet.engine.dbpersist.DBStatementAlter.process(DBStatementAlter.java:834)
at com.filenet.engine.dbpersist.DBStatementAlter.process(DBStatementAlter.java:778)

Ursachen

Das System ermittelt, ob eine Lösung aktiv ist, indem es regelmäßig die Uhrzeit der letzten Änderung des Lösungsordners überprüft. Ein Keepalive-Intervall gibt an, wie häufig die Lösungsaktivität überprüft wird. Das Keepalive-Standardintervall von 2 Sekunden ist für große Lösungsimplementierungen zu klein.

Fehlerbehebung

Erhöhen Sie den Wert des Keepalive-Intervalls für große Lösungsimplementierungen von 2 Sekunden auf 30 Sekunden. Der Wert wird in Millisekunden angegeben: 30.000 entspricht 30 Sekunden.

So erhöhen Sie das Keepalive-Intervall auf 30 Sekunden:

  1. Legen Sie den folgenden JVM-Parameter auf dem IBM Case Manager-Server fest:
    -Dcom.ibm.casemgmt.config.keep.alive.interval=30000
  2. Starten Sie JVM erneut, damit Ihre Änderungen wirksam werden.