L'interruzione della rete causa una procedura memorizzata che esegue una query sul collegamento DB per bloccarsi per sempre

StackOverflow https://stackoverflow.com/questions/331114

Domanda

Diverse procedure memorizzate supportano query su database remoti su una WAN. La rete occasionalmente si interrompe, ma il peggio che sia mai successo è stato il fallimento delle procedure e avrebbe dovuto essere riavviato.

Le ultime due settimane ha preso una svolta sinistra. Invece di fallire, le procedure si bloccano in uno stato bizzarro bloccato. Non possono essere uccisi all'interno di Oracle e finché esistono tentativi di eseguire altre copie della procedura si bloccheranno. L'unica soluzione che abbiamo trovato è di eliminare le procedure offensive con un "kill -9" dal sistema operativo. Alcune di queste procedure non sono state modificate per mesi, anche anni, quindi sospetto una causa principale nella configurazione DB o DB.

Qualcuno ha qualche idea di cosa possiamo fare per risolvere il problema? Oppure PL / SQL ha un meccanismo di timeout che posso aggiungere al codice in modo da poter creare un'eccezione che posso gestire a livello di programmazione?

È stato utile?

Soluzione 2

Non siamo mai stati in grado di determinare che cosa ha causato ciò. Riteniamo che sia stato un difetto nella patch cumulativa di ottobre 2008. Forse una patch successiva come risolto. Non è successo da un paio di mesi (e abbiamo avuto alcune interruzioni di rete) quindi spero che il problema sia scomparso.

Altri suggerimenti

Quale versione del database? Sono bloccati con SQL o in PL / SQL? Qualcuno ha aggiunto recentemente la gestione delle eccezioni alle routine? Ricordo che in 9iR2 ci era stato detto che, invece o sollevando un'eccezione alla routine di chiamata, dovevamo catturare tutte le eccezioni e continuare a funzionare (fondamentalmente tentare di eseguire l'elaborazione di tutti gli elementi nel lavoro anche se alcuni falliscono). Inevitabilmente, i lavori si bloccavano in un ciclo infinito con errori SQL, rimanendo catturati dal gestore delle eccezioni e riprovando. E non potevano essere uccisi perché gli ALTRI hanno anche colto l'eccezione "la tua sessione è stata uccisa". Penso che quest'ultimo sia cambiato in 10g in modo che l'eccezione non sia stata rilevata.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top