Oct 30, 2007

Script para recompilar objetos inválidos en Oracle

Este script sirve para recompilar todos objetos inválidos en la base de datos, debe ser corrido como el Usuario SYS:

/*
# ----------------------------------------------------------------------
# Autor : Felipe Donoso Bastías
#
# Fecha de creación : 29-08-2007
#
# Objetivo : Recompilar todos los objetos inválidos de la base de datos
#
# Modificado : Felipe Donoso Bastías 04-09-2007
#
# ----------------------------------------------------------------------
*/
SET SERVEROUTPUT ON
DECLARE
CURSOR C_OBJETOS
IS
SELECT OWNER, OBJECT_NAME, OBJECT_TYPE FROM DBA_OBJECTS
WHERE STATUS = 'INVALID';

nombre_objeto VARCHAR2(100);
propietario VARCHAR2(100);
tipo_objeto VARCHAR2(100);
sql_str VARCHAR2(1000);

BEGIN
OPEN C_OBJETOS;
LOOP
FETCH C_OBJETOS INTO propietario, nombre_objeto, tipo_objeto ;
EXIT WHEN C_OBJETOS%NOTFOUND;
IF tipo_objeto = 'PACKAGE BODY' THEN
sql_str := 'ALTER PACKAGE '||propietario||'.'||nombre_objeto||' COMPILE';
dbms_output.put_line(sql_str);
EXECUTE IMMEDIATE sql_str;
sql_str := 'ALTER PACKAGE '||propietario||'.'||nombre_objeto||' COMPILE BODY';
dbms_output.put_line(sql_str);
EXECUTE IMMEDIATE sql_str;
END IF;
IF tipo_objeto = 'PROCEDURE' THEN
sql_str := 'ALTER PROCEDURE '||propietario||'.'||nombre_objeto||' COMPILE';
dbms_output.put_line(sql_str);
EXECUTE IMMEDIATE sql_str;
END IF;
IF tipo_objeto = 'FUNCTION' THEN
sql_str := 'ALTER FUNCTION '||propietario||'.'||nombre_objeto||' COMPILE';
dbms_output.put_line(sql_str);
EXECUTE IMMEDIATE sql_str;
END IF;
IF tipo_objeto = 'TRIGGER' THEN
sql_str := 'ALTER TRIGGER '||propietario||'.'||nombre_objeto||' COMPILE';
dbms_output.put_line(sql_str);
EXECUTE IMMEDIATE sql_str;
END IF;
IF tipo_objeto = 'VIEW' THEN
sql_str := 'ALTER VIEW '||propietario||'.'||nombre_objeto||' COMPILE';
dbms_output.put_line(sql_str);
EXECUTE IMMEDIATE sql_str;
END IF;
END LOOP;
CLOSE C_OBJETOS;
END;
/

1 comment:

  1. oi andrés,

    interessante o que você propõe. haha: D, é bom que você gostou do meu blog, eu estou contente que meus posts pode parecer interessante. Uma pergunta: Qual é o endereço do seu blog para dar uma olhada?

    Desculpem o meu Português ruim, mas eu falo apenas Inglês e Espanhol ...

    Saudações

    ReplyDelete