2012-09-11 15 views
7

ho fatto terribile errore nella creazione dell'indice SQL:Come posso verificare lo stato di creazione dell'indice su Oracle 11?

create index IDX_DATA_TABLE_CUSECO on DATA_TABLE (CUSTOMER_ID, SESSION_ID, CONTACT_ID) 
    tablespace IDX_TABLESPACE LOCAL ; 

Come potete vedere ho perso parola chiave "ONLINE" per creare l'indice senza bloccare tavolo di produzione con un elevato utilizzo con 600m + record. SQL corretto è:

create index IDX_DATA_TABLE_CUSECO on DATA_TABLE (CUSTOMER_ID, SESSION_ID, CONTACT_ID) 
    tablespace IDX_TABLESPACE LOCAL ONLINE; 

L'ho fatto in PL/SQL Developer. Quando stavo cercando di fermarlo, il programma si blocca e si blocca.

Il sistema di produzione non funziona per 9 ore e il mio capo vuole esplodere. : D

C'è qualche possibilità di vedere quanti secondi/minuti/ore sono rimasti Oracle 11g per elaborare questa creazione dell'indice? O forse c'è qualche possibilità di vedere Oracle funziona ancora su questa richiesta? (Lo sviluppatore PL/SQL si è arrestato in modo anomalo).

Per odiano: So che dovrei fare questo, come accennato qui: (source)

CREATE INDEX cust_idx on customer(id) UNUSABLE LOCAL; 
ALTER INDEX cust_idx REBUILD parallel 6 NOLOGGING ONLINE; 

+0

Il tuo link non sembra essere valido. Spero che qualunque articolo tu stia guardando almeno parli dell'impostazione 'skip_unusable_indexes' prima di dirti di creare un indice inutilizzabile e che ti dice di cambiare l'impostazione di parallelismo dell'indice una volta che è stato creato. –

+2

L'articolo non lo fa, ma i commenti fanno e spiegano anche perché il consiglio non è così utile come sembri pensare. Sono con Justin però, perché non hai ucciso la sessione che sta facendo girare l'indice? –

risposta

13

Dovreste essere in grado di visualizzare l'avanzamento dell'operazione in V$SESSION_LONGOPS

SELECT sid, 
     serial#, 
     target, 
     target_desc, 
     sofar, 
     totalwork, 
     start_time, 
     time_remaining, 
     elapsed_seconds 
    FROM v$session_longops 
WHERE time_remaining > 0 

Ovviamente, in un sistema di produzione, probabilmente avrei ucciso la sessione ore fa piuttosto che lasciare che l'operazione DDL continuasse a prevalere t agli utenti di accedere all'applicazione.

+0

Non riesco a vedere la mia sessione perché quando la connessione PL/SQL Developer si interrompe e la sessione si interrompe ma quando sto cercando di calcolare le statistiche ricevo un errore: Error report: ORA-20000: this index object "PRODSCHM"."IDX_DATA_TABLE_CUSECO" is being online built or rebuilt WBAR

+0

@WBAR - Non sono sicuro di aver capito cosa stai dicendo Il fatto che l'applicazione client (PL/SQL Developer) si sia arrestata in modo anomalo non ha nulla a che fare con se la sessione del database è ancora in esecuzione. Vedi la sessione in v $ session? –

+0

Non vedo quella sessione – WBAR