Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.server -> Re: serializable isolation level behavior question
"Laurenz Albe" <invite_at_spam.to.invalid> wrote in message
news:1161162187.460298_at_proxy.dienste.wien.at...
> Bob Jones <email_at_me.not> wrote:
> >>>>>> Session 2 (isolation level serializable)
> >>>>>>
> >>>>>> Set transaction isolation level serializable
> >>>>>>
> >>>>>> Select * from dd; (2 rows returned at this point)
> >>>>>>
> >>>>>> Now truncate the table from session1:
> >>>>>> Truncate table dd; (issue implicit commit)
> >>>>>>
> >>>>>> Now again run the following select from session 2:
> >>>>>>
> >>>>>> Select * from dd; (This should still shows 2 rows as
> >>>>>> read data from rollback segments since in serializable mode, it
need
> >>>>>> to
> >>>>>> show the pre-image before the truncate but it is showing 0 rows)
> >>>>>>
> >>>>>> Is this expected behavior that in second session it returns 0 rows
> >>>>>> and
> >>>>>> not 2 rows?
> >>>>>
> >>>>> Yes, truncate does not generate any undo. In this case, you should
use
> >>>>> delete instead.
> >>>>
> >>>> True, that explains why anybody who knows Oracle could expect this
> >>>> behaviour.
> >>>>
> >>>> But that is not standard compliant, is it?
> >>>
> >>> What standard? What does the standard say?
> >>
> >> "The execution of concurrent SQL-transactions at isolation level
> >> SERIALIZABLE is guaranteed to be serializable."
> >
> > Are we still talking about TRUNCATE? Serializing it is like serializing
> > drop table. It does not make sense. I don't know what part was I not
> > clear about.
>
>
>
> Just because Oracle does not do it doesn't mean it cannot be done.
> There are different approaches to a solution:
> a) somehow pretend to the serializable transaction that the data are still
> there.
> b) throw an error.
> c) use shared table locks that block DML statements.
>
>
>
>