Re: Temporary space needed to create a constraint

From: Jonathan Lewis <jonathan_at_jlcomp.demon.co.uk>
Date: Wed, 11 Jul 2012 12:39:28 +0100
Message-ID: <10D3796497CF4E7EA70B72AEF4DDD820_at_Primary>


What's your code to define the constraint and the existing index, and what's the execution plan you're seeing in the trace file ? And is the original table a simple heap table, or is it partitioned, and if partitioned was the index local or global ?

Create non-unique index;
add unique (or pk) constraint;

Shouldn't need to do anything other than walk the index - unless there's something funny going on with an attempt to do this online.

Have you tried

    add constraint enabled novalidate ?
    alter constraint validate ?

Regards

Jonathan Lewis
http://jonathanlewis.wordpress.com/all_postings

Author: Oracle Core (Apress 2011)
http://www.apress.com/9781430239543

  • Original Message ----- From: "Peter Hitchman" <pjhoraclel_at_gmail.com> To: "oracle-l" <oracle-l_at_freelists.org> Sent: Wednesday, July 11, 2012 11:13 AM Subject: Re: Temporary space needed to create a constraint

Hi
Thanks for the comments. I forgot to say I think that the index I created is non-unique. After some more tracing I saw that Mark got it right, the SQL being run to ensure there are no duplicates is doing a hash join. I compared this to what happens when a unique index is created and the 10046 trace just showed a full table scan, where as the constraint creation runs some SQL that groups by the primary columns and has the predicate "having count(1) >1". I could not see in the trace for creating a unique index any SQL being run to ensure uniqueness, only the STAT line "SORT CREATE INDEX".

So now I am trying with a large HASH_AREA_SIZE and parallel slaves.

Regards
Pete

--

http://www.freelists.org/webpage/oracle-l Received on Wed Jul 11 2012 - 06:39:28 CDT

Original text of this message