Niekiedy a nawet dość często kiedy musimy dodać do wybranego schematu jakiś pakiet, procedurę lub funkcje okazuje się że inne obiekty schematu zostały rozkompilowane. Oczywiście w miarę używania kolejnych obiektów będą one kompilowane przez samą bazę jeśli nie mają w sobie błędów ale może to trwać bardzo długo. Warto po modyfikacjach sprawdzić więc czy na naszej bazie są jakieś obiekty które do prawidłowego działania będą potrzebne zwalidowane.
Sprawdzamy więc listę rozwalidowanych obiektów na naszej bazie
Pokaże nam się lista obiektów które mają status INVALID czyli błędne. Możemy teraz kompilować po kolei ręcznie czyli wydając polecenie
Widzimy jednak że powyższa metoda jest dość pracochłonna ponieważ wszystkie obiekty musimy wypisać ręcznie.
Można też użyć alternatywnego rozwiązania wywołując procedurę ALTER_COMPILE z pakietu DBMS_DDL.
Jak można zauważyć w powyższym trzeba podać trzy parametry (typ, schema, name) czyli typ obiektu i tutaj możemy podać jeden z 5 (PACKAGE, PACKAGE BODY, PROCEDURE, FUNCTION, TRIGGER), schema to nazwa właściciela obiektu oraz name w którym podajemy nazwę obiektu.
Myślę jednak że powyższe metody można zastosować jeśli mamy mało rozkmpilowanych obiektów.
Jeśli mamy większą liczbę obiektów ze statusem ‘INVALID’ lepiej napisać jakiś blok który skompiluje nam nasze obiekty. Można użyć poniższego, w out zwróci nam listę obiektów które nie udało się zwalidować
Czasem łatwiej będzie użyć procedury COMPILE_SCHEMA z pakietu DBMS_UTILITY. Należy wtedy podać nazwę naszego schematu i procedura wykona próbę skompilowania wszystkich obiektów w schemacie
Do kompilacji obiektów można również użyć skryptu utlrp.sql wykonanego jako użytkownik SYS lub użytkownik z uprawnieniami sysdba który znajduje się w katalogu ORACLE_HOME/rdbms/admin i bazuje na pakiecie UTL_RECOMP. Skrypt utlrp.sql wywołuje skrypt utlprp.sql z parametrem 0.
Parametr 0 – liczba równoległości z parametru CPU_COUNT
SELECT p.NAME, p.VALUE FROM v$parameter p WHERE p.NAME = 'cpu_count’;
Parametr 1 – kompilacja wykonywana w kolejce obiekt za obiektem
Parametr N – liczba wątków