sql >> Database teknologi >  >> RDS >> Oracle

Fejl ved tilbagerulning af JDBC-transaktion ved lukket forbindelse

Nej (bortset fra en alvorlig fejl i Oracle eller medmindre vi taler om en distribueret transaktion).

Hvis en forbindelse mellem klienten og databasen mistes, er det muligt, at databasen aldrig har modtaget anmodningen om at udføre transaktionen. I så fald, når databasen opdager, at klienten er død (hvilket kan tage noget tid), vil transaktionen blive rullet tilbage. Hvis forbindelsen afbrydes, er det muligt, at databasen commiterer succesfuldt, men klienten får aldrig beskeden om, at commitningen lykkedes.

Hvis vi taler om en distribueret transaktion, er det muligt, at transaktionen forbliver i tvivl på en (eller flere) af de distribuerede noder. Hvis det er tilfældet, vil transaktionen blive vist i dba_2pc_pending på de knudepunkter, hvor transaktionen stadig afventer. Men det ville ikke være delvist forpligtet på nogen node.

Hvis jeg skulle gætte, hvis du ser noget, der er "delvist forpligtet", vil jeg vædde på, at problemet er, at dine transaktionsgrænser ikke er korrekte, og at du har en kode et sted, der forpligter (implicit eller eksplicit) hvor du ikke forventer det.



  1. Nulstil sekvens i oracle 11g

  2. Hvordan opretter man et array fra dette resultatsæt (indlejrede kategorier gemt i databaseret med traversal model)?

  3. MySQL MATCH virker ikke med to karakterer?

  4. SQL-forespørgselssætning