Creating an index on a busy table may fail when user's DML is using the table (in 11G database). 
SQL> CREATE INDEX owner.index_IDX1 ON owner.table_name(col1, clm_id, col2) TABLESPACE tablespace_name;
    *
ERROR at line 1:
 ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired
Specify
 ONLINE to indicate that DML operations on the table will be allowed 
during creation of the index. Oracle will create an extra log table to 
keep track of any data changes without locking the table. There are 
restrictions on Online Index Building. One of them is that parallel DML 
is not supported during online index building. Oracle Database returns 
an error, if you specify ONLINE and then issue parallel DML statements.
Besides, other options, such as PARALLEL and NOLOGGING, will speed up the index creation.
SQL>
 CREATE INDEX owner.index_IDX1 ON owner.table_name(col1, clm_id, col2) 
TABLESPACE tablespace_name PARALLEL ( DEGREE 4 ) nologging online; 
Index created. 
With
 parallel, Oracle may automatically spawn parallel executions for every 
single SELECT statement. After that, the two options can be turned off 
by below statement: 
SQL> alter index owner.index_IDX1 logging noparallel;
Extra notes: statement to turn on monitoring index usage (usually shall exclude PK from monitoring):
SQL> alter index owner.index_IDX1 monitoring usage ; 
 
No comments:
Post a Comment