Re: Important note about asynchronous commit

  • From: "Ghassan Salem" <salem.ghassan@xxxxxxxxx>
  • To: juancarlosreyesp@xxxxxxxxx
  • Date: Wed, 27 Sep 2006 11:05:16 +0200

There may be cases where you can forgo a transaction if the system fails (
i.e. never replay it, and loose it).
An example is a system recording calls done by phone users: if you fail to
commit that a given user did a call, you do not loose much
and you can afford it (if the gains are substantial, in terms of
performance). When you compute the risk of a crash (for a well constructed
system), the loss that you may incur over a year is really very low.


On 9/26/06, Juan Carlos Reyes Pacheco <juancarlosreyesp@xxxxxxxxx> wrote:

Important quote Reviewer: Jonathan Lewis from UK <quote> they basically mean "when you commit and you return from commit, the commit may or may NOT have happened yet, if the system fails after you return from commit but before the commit actually happens - you have to be prepared to REPLAY that transaction if necessary - something you can do in a batch load easily, but not so in a transactional system <end quote>

I would phrase that somewhat differently - the commit has definitely
in that your changes are published and visible to all other sessions as
that SCN. However, as you say, the changes are not protected - if the
crashes, then your transaction may not be recoverable because it has not
into the log file. The D of ACID is no longer enforced.

Admittedly, when I talk about nologging operations I tend to make the
melodramatic statement "if it's not in the log file it never happened" but
explain that as it's as far as the standby or recovery are concerned it
happened.  For async commits, it happened, but there's a window (of up to
3 seconds) where it won't guaranteeably recover or get to the standby.

We should also bear in mind that this makes official and choosable a
that has been happening inside pl/sql calls for years - commits publish
but the transactions are not guaranteed to be synched to the log file
until the
pl/sql call ends and returns control to the called -- //

Other related posts: