sql >> Database >  >> RDS >> Oracle

Als ik PreparedStatement.cancel() in een JDBC-toepassing aanroep, wordt deze dan daadwerkelijk gedood in een Oracle-database?

Houd er rekening mee dat wat ik hieronder zeg gebaseerd is op observaties en gevolgtrekkingen van Oracle in gebruik, en niet gebaseerd is op enig diep begrip van Oracle's internals. Niets daarvan moet als gezaghebbend worden beschouwd.

Wat Ninesided in hun eerste alinea zei, is correct. Pas echter op voor de voorgestelde test. Niet alle langlopende Oracle-query's zijn hetzelfde. Het lijkt erop dat query's in twee fasen worden geëvalueerd, ten eerste een fase die voldoende gegevens combineert om te weten hoe de rijen in de juiste volgorde moeten worden geretourneerd, en ten tweede een fase die de rijen retourneert en de gaten opvult die niet in de eerste fase. De werkverdeling tussen de twee fasen wordt ook beïnvloed door de instellingen van de cost-based optimizer. bijv. Eerste rijen versus alle rijen.

Als de query zich nu in fase 1 bevindt, lijkt het annuleringsverzoek in het beste geval in de wachtrij te staan ​​om aan het einde van fase 1 te worden toegepast, wat betekent dat de query blijft werken.

In fase 2 worden rijen in bundels geretourneerd en na elke bundel kan het annuleercommando van kracht worden, dus aangenomen dat de bestuurder het commando ondersteunt, zal het annuleringsverzoek ertoe leiden dat de query wordt afgebroken.

De specificatie voor de JDBC-opdracht annuleren lijkt niet te zeggen wat er moet gebeuren als de query niet stopt met uitvoeren, en daarom kan de opdracht wachten op bevestiging van de kill, of kan een time-out optreden en terugkeren terwijl de query nog steeds actief is.



  1. Oracle Date datatype, getransformeerd naar 'YYYY-MM-DD HH24:MI:SS TMZ' via SQL

  2. PostgreSQL 11:Wat is er nieuw?

  3. Hoe het verschil tussen twee datums in T-SQL te berekenen

  4. Een MySQL-database beheren in cPanel met PHPMyAdmin