Si prega di notare che ciò che dico di seguito si basa su osservazioni e inferenze di Oracle in uso, e non si basa su una profonda comprensione degli interni di Oracle. Nessuno di questi deve essere considerato autorevole.
Ciò che detto nel proprio primo paragrafo è corretto. Tuttavia, fai attenzione al test suggerito. Non tutte le query Oracle a lunga esecuzione sono uguali. Sembra che le query siano valutate su due fasi, prima una fase che combina dati sufficienti per sapere come restituire le righe nel giusto ordine e secondo una fase che restituisce le righe che riempiono gli spazi vuoti che non ha calcolato nel prima fase. La divisione del lavoro tra le due fasi è influenzata anche dalle impostazioni dell'ottimizzatore basato sui costi. per esempio. Prime righe vs Tutte le righe.
Ora, se la query è in fase 1, la richiesta di annullamento sembra al meglio essere accodata per essere applicata alla fine della fase 1, il che significa che la query continua a funzionare.
Nella fase 2, le righe vengono restituite in mazzi, e dopo ogni gruppo, il comando di annullamento può avere effetto, quindi supponendo che il driver supporti il comando, la richiesta di annullamento comporterà l'interruzione della query.
Le specifiche per il comando di annullamento JDBC non sembrano dire cosa dovrebbe accadere se la query non si interrompe e quindi il comando può attendere la conferma dell'uccisione, oppure può scadere e tornare con la query ancora in esecuzione.
Non nel mio caso. https://stackoverflow.com/questions/44383579/how-do-i-forcibly-close-connections-from-a-connection-pool – supertonsky