sql >> Databasteknik >  >> RDS >> Oracle

När jag anropar PreparedStatement.cancel() i ett JDBC-program, dödar det verkligen det i en Oracle-databas?

Observera att det jag säger nedan är baserat på observationer och slutsatser av Oracle som används, och är inte baserat på någon djup förståelse av Oracles inre delar. Inget av det bör betraktas som auktoritativt.

Det ninesided sa i deras första stycke är korrekt. Se dock upp med det föreslagna testet. Inte alla långvariga orakelfrågor är desamma. Det verkar som att frågor utvärderas i två faser, först en fas som kombinerar tillräckligt med data för att veta hur man returnerar raderna i rätt ordning, och för det andra en fas som returnerar raderna som fyller i luckorna som den inte beräknade i första fasen. Arbetsfördelningen mellan de två faserna påverkas också av inställningarna för den kostnadsbaserade optimeraren. t.ex. Första raderna vs alla rader.

Nu, om frågan är i fas 1, verkar avbrytningsbegäran i bästa fall stå i kö för att tillämpas i slutet av fas 1, vilket innebär att frågan fortsätter att fungera.

I fas 2 returneras rader i grupper, och efter varje grupp kan avbrytkommandot träda i kraft, så förutsatt att föraren stöder kommandot kommer avbrytningsbegäran att resultera i att frågan dödas.

Specifikationen för JDBC cancel-kommandot verkar inte säga vad som ska hända om frågan inte slutar köra, och därför kan kommandot vänta på bekräftelse av dödandet, eller kan timeout och återkomma med frågan fortfarande igång.



  1. Hur undviker man att SSIS FTP-uppgiften misslyckas när det inte finns några filer att ladda ner?

  2. hur man beräknar likhet mellan två strängar i MYSQL

  3. hur man hittar alla index och deras kolumner för tabeller, vyer och synonymer i Oracle

  4. Konvertera UTC millisekunder till DATETIME i SQL-server