Re: How to avoid or handle the ORA-0054s

  • From: "Mark J. Bobak" <mark@xxxxxxxxx>
  • To: hkchital@xxxxxxxxxxxxxx
  • Date: Sat, 01 Jan 2005 05:19:54 -0500

Actually, in 10g, there is "ddl_wait_for_locks", which defaults to
FALSE.  I've not yet experimented with it, so, I won't comment, other
than to speculate that it will do what you want.

It really sounds like an upgrade to to avoid the rebuilds in the
first place is the right answer.  A while back, someone had a similar
requirement, and I suggested use of DBMS_LOCK.  Use it to create a UL
enqueue.  Write your code so that any code that does DML against the
table that the index is on takes a share mode lock.  Lots of concurrent
DML would be able to take the share mode lock.  When it's time to run
the rebuild script, have it take an exclusive lock.  If there is any DML
running against the table, the request for exclusive lock will wait,
queued behind the share locks.  When the DML completes, the exclusive
lock will be granted, and you can do the rebuilds without fear of
ORA-0054.  When the rebuilds complete, release the exclusive lock, and
any DML which queued behind the exclusive lock will run.  

But, I think it's a lot easier to upgrade to or 6.  And, if you
run across any kind of similar requirement in 10g, "ddl_wait_for_locks"
is probably worth a look.

Hope that helps,


On Fri, 2004-12-31 at 22:05, Hemant K Chitale wrote:

> I have a need to regularly Recreate certain Indexes .  {see note below on 
> WHY !}
> This is scripted.  However, the script sometimes errors on the DROP with 
> ORA-0054
> and, of course, the CREATE doesn't go through.
> We are trying to put a loop to check the spooled output of the script and 
> rerun
> it if the DROP fails.
> However, I was wondering if anyone has implemented a technique to handle 
> ORA-0054s
> and automated the retry of the DDL.
> Why I can't use a REBUILD is because it is a corrupt index.
> {and surely, the REBUILD does use a WAIT when it switches the indexes.
> Why doesn't Oracle allow us to write a DROP ... WAIT ?}
> NOTE : Why the Recreate Indexes :
> These are 6 BitMap Join Indexes.  A bug in causes occasional ORA-600s
> when querying the table. The solution is to Recreate the Indexes.  I had 
> emailed
> this list on 03-Dec on ORA-600 [12700] errors with these BMJIs.
> Although is indicated to have a fix, I see some references to other
> BMJI issues in and we haven't yet gone to for this 
> particular database.
> Hemant K Chitale
> --
> //

Mark J. Bobak
"Science is the belief in the ignorance of experts."  --Richard P.


Other related posts: