Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Usenet -> c.d.o.server -> Re: Rollback Segments

Re: Rollback Segments

From: Dariusz Trocha <trocha_at_friko5.onet.pl>
Date: Tue, 18 Aug 1998 10:43:52 +0200
Message-ID: <98bC1.864$ds2.127165@news.tpnet.pl>


Hi Carlos!

"Snapshot too old .." means that you have a long running query or read-only transaction which uses data being changed by other transactions while it's running. Oracle uses rollback segments to retrieve older values (to give you consistent view of data). After transaction commits its rollback entries may be used for this purpose until another transaction need a place in this rollback segment.
  So, let's say you have a long-running query which - among others - uses data from table X. While it is running another transaction changes some data in table X and commits. The older values (before change) are in the rollback segment and query can still reach it. But after some time another transaction can reuse this place in rollback segment. Then, if your query (which is still running) needs to get the previous values of some rows in X you will get "Snapshot too old ..." message.

   The simplest solution is to lock in exclusive mode all the tables your query uses. But I know it can be unacceptable because it would stop all transactions that want to modify these tables. So, probably, the best thing you can start with is to make your rollback segments generally biger. The values you gave seem very small to me. I'd suggest for example 16 rollback segments like this:
initial 1M next 1M minextents 10 optimal 10M in a 200M tablespace (divide it by something if you can not afford so much).

-> my advice: always use maxextents or optimal or fill the tablespace
tightly with segments!

Darek Received on Tue Aug 18 1998 - 03:43:52 CDT

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US