Abbiamo un processo che può durare tra pochi secondi e alcuni minuti. Pertanto, possiamo aggiornare solo alcuni record o migliaia di essi. Il processo può essere eseguito solo quando tutto è stato eseguito correttamente.
Recentemente abbiamo iniziato a riscontrare problemi durante il tentativo di eseguire il commit della transazione poiché erano contrassegnati come "rollbackOnly". Ho scoperto che in effetti la transazione era stata contrassegnata come "rollbackOnly" perché era scaduta un po 'prima (non è chiaro per vedere nei file di registro come il nostro server delle applicazioni è Websphere e il suo gestore delle transazioni fornisce solo un avvertimento su una riga) e come tale non potrebbe essere commesso. Ovviamente è logico che non sia possibile eseguire il commit di una transazione scaduta.
Il problema è infatti che non impostiamo mai il timeout della transazione nelle definizioni delle transazioni e che in tal caso il valore del timeout è quello impostato a livello del server delle applicazioni (vedere Impostazioni della transazione di Websphere, il paragrafo su" Totale timeout della durata della transazione "). Quel valore è 2 minuti e a volte lo eccediamo.
Ora, questo spiega l'impostazione (e nel caso qualcuno incontri una transazione "rollbackOnly", ho fornito qui una possibile spiegazione).
Sono tentato di aumentare il timeout, ma ho anche visto nella documentazione che il timeout può essere impostato su 0, il che significa che non c'è timeout .
Pertanto, la mia domanda è: quali sono i pericoli legati all'impostazione di un timeout di durata della transazione illimitato ?
Si noti che sono a conoscenza delle soluzioni di database / programmatiche per il mio problema, come ad esempio lavorare su tabelle temporanee e invertire i dati dalle tabelle temporanee alle tabelle reali quando sappiamo che tutto è stato fatto correttamente (usando PL / SQL per esempio ). Sono solo curioso della cosa del timeout della transazione.