Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Mailing Lists -> Oracle-L -> Re:Snapshot too old
Headed for home. So, in short, theres delayed block counts, which could be responsible too.
Raj
dgoulet_at_vicr. com To: Multiple recipients of list ORACLE-L <ORACLE-L_at_fatcity.com> Sent by: cc: root_at_fatcity. Subject: Re:Snapshot too old com January 07, 2003 04:05 PM Please respond to ORACLE-L
Patrick,
Chasing down the culprit of a randomly happening ORA-1555 can be a true
pain
in the ^%%.
First thing to check is if you have a commit happening across a cursor.
This little jewel happens when the duhveloper decided that he needed a
cursor to
retrieve some data from a table and then does some sporadic updates on the
same
table and commits the action. A lot of other database will then invalidate
the
cursor, similarly to what happens with a cursor that has the "for update"
clause, but Oracle allows one to do that with a normal cursor without
closing
and reopening. The end result are some intermittent ORA-1555's. One
solution
to that, if possible, is to add an order by or group by to the cursor's
statement which forces Oracle to create a temp table. The other solution
is to
not do that.
Second thing is to look around and see if some one else is running a
bulk
data load/update/delete. Many more times than I care to remember I have
found
that long running jobs fail with an intermittent ORA-1555 not because of
anything their doing, but what someone else is doing in the database at the
same
time. This is a hard one to find and a harder one to fix since the
duhveloper
who creates the offending job does not see the error.
Lots of luck!!
Dick Goulet
____________________Reply Separator____________________ Author: "Patrick Van der Sande" <patrick.van.der.sande_at_skynet.be> Date: 1/7/2003 12:14 PM
Dear,
Since a few weeks I am tuning a big conversion batch written in PL/SQL
(millions of lines of code split over 7 batches)
When the job is running, certain batches stop with ORA-1555 : Snapshot
too old. Other batches run well till the end.
Bizarre is that not always the same job stops.
When I do a trace I see nothing. With a normal trace I am pretty sure
that I will never see it.
Rollback segments are rarely used. So making the rollbacks bigger or
smaller is not the solution.
They also tried to change the commit rate. That was not the solution.
When I modified the optimal size to NULL value to avoid shrinking and cached 3 heavily used sequences some runs went all the way but since a week it stops again with the same annoying error.
After that I put an event in the init.ora file : event = "1555 trace
name processstate forever, level 10"
A trace file was generated but I could not find the error in the trace
file.
I am pretty sure that Oracle just dumps all open cursors in a file.
Since there are 100 of cursors opened I do not have a clue which one
is provoking the error.
I already looked at the batches and I have identified in 5 of them a
"fetch across commit".
Still they have the error. But in the 2 remaining I can not find
this.(surely the 2 biggest ones, nice !)
So my question is :
How can I know where in the code the error is generated ? Must I change the definition of the event ? (I know there are other options but I can not find them right away) Should I use DBMS_PROFILER ? (it generates massive files !) Must they write exceptions everywhere in their code ?
Can somebody help me ?
Please do not send me an explanation of the "snapshot too old" error. I wake up with it and I go asleep with it.
Patrick
-- Please see the official ORACLE-L FAQ: http://www.orafaq.net -- Author: INET: Rajesh.Rao_at_jpmchase.com Fat City Network Services -- 858-538-5051 http://www.fatcity.com San Diego, California -- Mailing list and web hosting services --------------------------------------------------------------------- To REMOVE yourself from this mailing list, send an E-Mail message to: ListGuru_at_fatcity.com (note EXACT spelling of 'ListGuru') and in the message BODY, include a line containing: UNSUB ORACLE-LReceived on Tue Jan 07 2003 - 16:21:15 CST
(or the name of mailing list you want to be removed from). You may
also send the HELP command for other information (like subscribing).
![]() |
![]() |