Okudum bildim deme
Çok taat kıldım deme
Eğer Hak bilmez isen
Abes yere gelmektir –Mevlana
Merhaba
bugünkü yazımızda oracle package procedure vb.. invalide düşen objeleri görme ve istenirse tek tek, istenirse de tümünü nasıl compile ederiz onu inceleyeceğiz
kaç kayıt var bir bakalım…
---
SELECT count(*) FROM dba_objects
WHERE object_type IN ('PACKAGE', 'PACKAGE BODY')
-- buraya istenilen objeler eklenebilir...
AND status != 'VALID';
----
invalid objeleri sırayla compile etmek için
----
BEGIN
FOR cur_rec IN (SELECT owner,
object_name,
object_type,
DECODE(object_type, 'PACKAGE', 1,
'PACKAGE BODY', 2, 2) AS recompile_order
FROM dba_objects
WHERE object_type IN ('PACKAGE', 'PACKAGE BODY')
AND status != 'VALID'
ORDER BY 4)
LOOP
BEGIN
IF cur_rec.object_type = 'PACKAGE' THEN
EXECUTE IMMEDIATE 'ALTER ' || cur_rec.object_type ||
' "' || cur_rec.owner || '"."' || cur_rec.object_name || '" COMPILE';
ElSE
EXECUTE IMMEDIATE 'ALTER PACKAGE "' || cur_rec.owner ||
'"."' || cur_rec.object_name || '" COMPILE BODY';
END IF;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.put_line(cur_rec.object_type || ' : ' || cur_rec.owner ||
' : ' || cur_rec.object_name);
END;
END LOOP;
END;
----
tümünü tek seferda yapan metodlar
--recomp all
-- Schema Duzeyinde.
EXEC UTL_RECOMP.recomp_serial('SCOTT');
EXEC UTL_RECOMP.recomp_parallel(4, 'SCOTT');
-- Database Duzeyinde.
EXEC UTL_RECOMP.recomp_serial();
EXEC UTL_RECOMP.recomp_parallel(4);
-- Paralel job kullanarak.
EXEC UTL_RECOMP.recomp_parallel();
EXEC UTL_RECOMP.recomp_parallel(NULL, 'SCOTT');
--