Análisis tristemente realista de la que se nos viene encima.
    Se han publicado 155 historias y se han recibido 683 comentarios y opiniones.

Google


Script de creación de índices usando el catalogo de sistema.
Cuando se crea un objeto en una base de datos, la definición y características de estos objetos son guardadas en el catalogo del sistema de la base de datos. En concreto cuando creamos un índice, disponemos de varias vistas de sistema que nos permiten conocer sus caracteristicas, tanto de definición como de estado actual en la base de datos, estadísticas y un largo etc.

A continuación os adjunto un script que leyendo de las vistas dba_indexes y dbs_ind_columnsnos permite disponer del script de creación de ese índices, con las cláusula más comunes utilizadas para la creación del índice.

Esto puede ser util, por ejemplo, si deseamos hacer una carga masiva en una tabla, que dispone de varios índices, la tarea de la carga se hace bastante más agil si primero de eliminan los índices, lo cual nos obliga a volver a crearlos una vez terminada la carga.

Espero que os sea de utilidad.

set server output on;
DECLARE
CADENA VARCHAR2(1000) := ’’;
CADENA2 VARCHAR2(1000) := ’’;
I_NAME VARCHAR2(200) := ’’;

BEGIN
I_NAME := ’Nombre_Indice’;

SELECT ’(’ ||SUBSTR(SUBSTR(MAX(column_name),0),0,LENGTH(MAX(COLUMN_NAME))-1)|| ’)’ INTO CADENA
FROM ( SELECT SYS_CONNECT_BY_PATH(column_name, ’ ’) column_name
FROM ( SELECT ’"’ || column_name || ’",’ column_name, ROW_NUMBER() OVER (ORDER BY column_position) FILA
FROM DBA_IND_COLUMNS
where index_name = I_NAME )

START WITH FILA = 1
CONNECT BY PRIOR FILA = FILA - 1 ) ;

SELECT ’CREATE ’ || UNIQUENESS || ’ INDEX "’ || OWNER || ’"."’ || INDEX_NAME || ’" ON "’ || OWNER || ’"."’ || table_name || ’" ’ || CADENA || ’ PCTFREE ’ || PCT_FREE || ’ INITRANS ’ || INI_TRANS || ’ MAXTRANS ’ || MAX_TRANS || ’ COMPUTE STATISTICS ’ || ’ STORAGE(INITIAL ’ || INITIAL_EXTENT || ’ NEXT ’ || NVL(NEXT_EXTENT, 1048576) || ’ MINEXTENTS ’ || MIN_EXTENTS
|| ’ MAXEXTENTS ’ || max_extents || ’ PCTINCREASE ’ || NVL(PCT_INCREASE,0) || ’ FREELISTS ’ || NVL(FREELISTS,1)
|| ’ FREELIST GROUPS ’ || FREELIST_GROUPS || ’ BUFFER_POOL ’ || BUFFER_POOL || ’) TABLESPACE "’ || TABLESPACE_NAME || ’";’ INTO CADENA2
FROM DBA_INDEXES
WHERE INDEX_NAME = I_NAME ;
DBMS_OUTPUT.put_line (CADENA2);
END;




Publicado por almondiguilla el dia 08-05-09 a las 08:38:50
0 comentarios Enlace permanente


Escribe tu comentario

Usuario de eXtreblog (sí/no)

Nombre:

Contraseña:
?


Comentario:

Escribe el resultado de la suma: