W Oracle nieprzebraną skarbnicą wiedzy są widoki słownikowe. W widokach tych możemy znaleźć w zasadzie wszystkie informacje na temat naszej bazy danych- obiektów, struktury, kodu. Jak wykorzystać tę wiedzę? Jak najlepiej oczywiście!
Przy przygotowywaniu skryptu do kompilacji obiektów możemy posłużyć się jednym z nich.
DBA_OBJECTS / ALL_OBJECTS / USER OBJECTS
Widoki te zawierają informację, o wszystkich obiektach bazodanowych, tak procedurach i funkcjach jak też znaleźć możemy informacje o triggerach czy synonimach.
A co więcej każdy obiekt w tabeli ma określony STATUS - VALID/INVALID informujący o tym, czy obiekt jest poprwanie skompilowany czy nie. A dokładnie tego potrzebujemy!
Wyszukajmy zatem wszystkie nieskompilowane procedury, funkcje i pakiety:
select object_name, status
from user_objects
where status = 'INVALID'
and object_type in ('PROCEDURE', 'FUNCTION', 'PACKAGE');
Mając już te informacje zbudujemy sobie polecenie ALTER umożliwiające skompilowanie obiektów.
select
'ALTER ' || OBJECT_TYPE || ' ' ||
OWNER || '.' || OBJECT_NAME || ' COMPILE;'
from
all_objects
where
status = 'INVALID'
and
object_type in ('PACKAGE','FUNCTION','PROCEDURE');
I voila!
Teraz wystarczy skopiować i uruchomić wygenerowane altery i poczekać aż baza zrobi swoje!
Dla chętnych jest też druga metoda kompilacji obiektów, a w zasadzie całego schematu. W tym celu możemy wykorzystać pakiet DBMS_UTILITY.COMPILE_SCHEMA
Za pomocą tego pakietu możemy skompilować wskazany schemat i wszystkie jego obiekty lub też skompilować tylko nieskompilowane obiekty.
begin
DBMS_UTILITY.COMPILE_SCHEMA (
schema => 'SCOTT',
compile_all => false,
reuse_settings => FALSE);
end;
/
Parametry:
SCHEMA
nazwa schematu, który chcemy skompilować
COMPILE_ALL
true - gdy chcemy skompilować wszystkie obiekty
false - gdy chcemy skompilować tylko obiekty w statusie INVALID
REUSE_SETTINGS
czy powinny być zastosowane parametry obiektu czy bieżącej sesji
W skryptach instalacyjnych czy innych automatycznych zadaniach korzystam najczęściej z pakietu dbms_utility do kompilacji obiektów. Jednak gdy taka kompilacja ma być przeprowadzona ręcznie bo coś gdzieś na jakimś środowisku się rozkompilowało - wolę korzystać z wygenerowanych poleceń ALTER. Przy okazji mam możliwość zerknięcia, co się nie skompilowało i podjęcia decyzji, czy faktycznie kompilować czy jednak wymagana jest jakaś dodatkowa weryfikacja błędów.
Także do wyboru do koloru a także w zależności od okoliczności można wybrać narzędzie odpowiednie do zadania.
Komentarze
Prześlij komentarz