Рекомпиляция 'INVALID' Java-классов в Oracle Print
Written by Максим   
Wednesday, 10 June 2009 17:06
Liked:
1


Did not like: 0

Для выявления Java-классов, ставших по каким-то причинам невалидными и автоматической рекомпиляции этих классов можно использовать следующий подход:

  1. Объявляем курсор, который по очереди выбирает из таблицы DBA_OBJECTS имена невалидных классов (при необходимости в конструкции SELECT можно также указать имя пользователя, для которого мы хотим узнать список невалидных классов. Для этого достаточно добавить в часть WHERE условие: AND OWNER='<имя пользователя>'. Например, если нужно узнать список невалидных классов только в схеме SYS, добавляем AND OWNER='SYS');
  2. Динамически выполняем конструкцию вида 'ALTER JAVA CLASS "' || <имя текущего выбранного невалидного класса> || '" COMPILE';

Для автоматической рекомпиляции Java-классов со статусом 'INVALID' в Oracle можно использовать следующий скрипт:


	DECLARE

	    INVALID_CLASS_NAME VARCHAR2(2000);

	    

	    CURSOR CUR IS SELECT DBMS_JAVA.LONGNAME(OBJECT_NAME)

	                    INTO INVALID_CLASS_NAME

	                    FROM DBA_OBJECTS

	                    WHERE OBJECT_TYPE = 'JAVA CLASS'

	                      AND STATUS = 'INVALID'

	                      ORDER BY 1;    

	BEGIN

	    OPEN CUR;

	    DBMS_OUTPUT.ENABLE(10000);

	    LOOP

	       FETCH CUR INTO INVALID_CLASS_NAME;

	       EXIT WHEN CUR%NOTFOUND;

	

	       EXECUTE IMMEDIATE 'ALTER JAVA CLASS "' || INVALID_CLASS_NAME || '" COMPILE';

	   END LOOP;

	END;

	


Last Updated on Friday, 02 December 2011 09:03