Monday, September 04, 2006

An example - Snapshot too old

Snapshot too old

User SCOTT has updated the EMP table and has not committed the changes. The old values of the rows updated by SCOTT are written to the undo segment. When user JAKE queries the EMP table, Oracle uses the undo segment to produce a read-consistent view of the table. If JAKE initiated a long query, Oracle fetches the blocks in multiple iterations. User SCOTT can commit his transaction, and the undo segment is marked committed. If another transaction overwrites the same undo segment, JAKE’s transaction will not be able to get the view of the EMP table when the transaction started. This produces a snapshot too old error.

1 comment:

yds said...

How to understand 'snap shot too old'?

At time t1: JAKE got a 'snapshot' about EMP table

At time t2: someone updated EMP table

At time t3: JAKE cannot see what he can see at t1 anymore. So the 'snapshot' he got at time t1 is too old.