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

Home -> Community -> Mailing Lists -> Oracle-L -> Re: How to avoid or handle the ORA-0054s

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

From: Mark J. Bobak <mark_at_bobak.net>
Date: Sat, 01 Jan 2005 05:19:54 -0500
Message-Id: <1104574794.10406.81.camel@bobak.net>


Hemant,
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 9.2.0.5 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 9.2.0.5 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,

-Mark

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 9.2.0.4 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 9.2.0.5 is indicated to have a fix, I see some references to other
> BMJI issues in 9.2.0.5 and we haven't yet gone to 9.2.0.5 for this
> particular database.
>
> Hemant K Chitale
> http://web.singnet.com.sg/~hkchital
>
>
>
>
> --
> http://www.freelists.org/webpage/oracle-l

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


--
http://www.freelists.org/webpage/oracle-l
Received on Sat Jan 01 2005 - 04:18:20 CST

Original text of this message

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