2012-09-11 23 views
7

hice terrible error en la creación de índices de SQL:¿Cómo verifico el estado del índice de construcción en Oracle 11?

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

Como se puede ver que echaba de menos palabra clave "en línea" para crear un índice sin bloquear la tabla de producción con alto uso con 600m + registros. El SQL corregido es:

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

Lo terminé en PL/SQL Developer. Cuando estaba tratando de detenerlo, el programa deja de responder y se cuelga.

El sistema de producción no funciona desde hace 9 horas y mi jefe quiere explotar. : D

¿Hay alguna posibilidad de ver cuántos segundos/minutos/horas dejó Oracle 11g para procesar esta creación del índice? O tal vez, ¿hay alguna posibilidad de ver si Oracle sigue trabajando en esta solicitud? (El desarrollador PL/SQL se colgó).

para los enemigos: Sé que debería hacer esto, como se ha mencionado aquí: (source)

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

+0

Tu enlace no parece ser válido. Espero que cualquier artículo que esté viendo al menos se refiera a la configuración 'skip_unusable_indexes' antes de decirle que cree un índice inutilizable y que le indique que cambie la configuración de paralelismo del índice una vez que esté construido. –

+2

El artículo no lo hace, pero sí los comentarios, y también explica por qué el consejo no es tan útil como parece pensar. Sin embargo, estoy con Justin, ¿por qué no has matado a la sesión que está ejecutando la construcción del índice? –

Respuesta

13

Usted debe ser capaz de ver el progreso de la operación en 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 

Por supuesto, en un sistema de producción, probablemente hubiera matado a la sesión hace horas en lugar de dejar que la operación DDL continúe previniendo t usuarios de acceder a la aplicación.

+0

No puedo ver mi sesión porque cuando PL/SQL Developer falló la conexión y la sesión se apagó pero cuando estoy tratando de calcular estadísticas recibo un error: Error report: ORA-20000: this index object "PRODSCHM"."IDX_DATA_TABLE_CUSECO" is being online built or rebuilt WBAR

+0

@WBAR - No estoy seguro de que entiendo lo que está diciendo. El hecho de que la aplicación cliente (PL/SQL Developer) se haya bloqueado no tiene nada que ver con si la sesión de la base de datos aún se está ejecutando. ¿Ves la sesión en v $ session? –

+0

No veo esa sesión – WBAR

Cuestiones relacionadas