Invalid obyektlerin kampilasiyasi

2

Click here to load reader

description

Invalid obyektlerin kampilasiyasini generasiya eden skript

Transcript of Invalid obyektlerin kampilasiyasi

Page 1: Invalid obyektlerin kampilasiyasi

İnvalid obyektlərin kampayl etmək üçün generasiya edilən skript Bəzən verilənlər bazasında bəzi obyektlər invalid statusuna düşürlər. Bunun bir çox səbəbi ola bilər: objektin modifikasiyası, yeni obyektin kampilasiyası (mövcud və aslı olan obyektlər) və s. Həll yolu kimi @$ORACLE_HOME/rdbms/admin/utlrp.sql skriptini çalışdırmaq olar və ya invalid obyektlərin siyahısını tərtib edərək onları kampyl (compile) etmək olar. Lakin utlrp bir az təhlükəlidir və biz bu utilitdən verilənlər bazasını upgrade-i zamanı istifadə edirik. (Yəni həmən zaman VB müraciət edən olmur) Məsələn: 9i > 10g > 11g (eyni zamanda reliz (release) upgrade). Əgər invalid obyektlərin sayı nə həddən çox nədə az saydadırsa, o, zaman aşağıdakı sorğunun nəticəsini götürüb çalışdırmaq olar. SQL> select 'ALTER TRIGGER '||OWNER||'.'||OBJECT_NAME||' COMPILE;' from dba_objects where status='INVALID' AND OBJECT_TYPE='TRIGGER' union select 'ALTER FUNCTION '||OWNER||'.'||OBJECT_NAME||' COMPILE;' from dba_objects where status='INVALID' AND OBJECT_TYPE='FUNCTION' union select 'ALTER PACKAGE '||OWNER||'.'||OBJECT_NAME||' COMPILE BODY;' from dba_objects where status='INVALID' AND OBJECT_TYPE='PACKAGE BODY' union select 'ALTER PROCEDURE '||OWNER||'.'||OBJECT_NAME||' COMPILE;' from dba_objects where status='INVALID' AND OBJECT_TYPE='PROCEDURE' Nümunə ALTER FUNCTION ULFET.TEST_FUNC COMPILE; ALTER PACKAGE ULFET.LOG_TOOL COMPILE BODY; ALTER PROCEDURE ULFET.UPDATE_EMP COMPILE; ALTER PROCEDURE ULFET.ADD_EMP COMPILE; ALTER TRIGGER ULFET.TAKE_OLD_VALUE COMPILE; Eyni zamanda siz DBMS_DDL və DBMS_UTILITY paketlərindəndə istifadə edə bilərsiniz: EXEC DBMS_DDL.ALTER_COMPILE('PACKAGE', 'ULFET', 'LOG_TOOL'); və ya EXEC DBMS_UTILITY.COMPILE_SCHEMA('ULFET'); Və nəhayət aşağıdakı kimi PLSQL anonym bloku yazıb icra edə bilərsiniz:

Page 2: Invalid obyektlerin kampilasiyasi

SQL> set serverouput on SQL> DECLARE comp_pack VARCHAR2 (100); comp_pack_body VARCHAR2 (200); comp_view VARCHAR2 (200); comp_proc VARCHAR2 (200); comp_trig VARCHAR2 (200); comp_func VARCHAR2 (200); BEGIN FOR c IN ( SELECT * FROM dba_objects WHERE status = 'INVALID' ORDER BY object_type) LOOP BEGIN --kampayl skripti generasiya edilməsi comp_pack :='alter package '|| c.owner|| '.'|| c.object_name|| ' compile;'; comp_pack_body :='alter package '|| c.owner|| '.'|| c.object_name|| ' compile body;'; comp_view :='alter view ' || c.owner || '.' || c.object_name || ' compile;'; comp_proc :='alter procedure '|| c.owner|| '.'|| c.object_name|| ' compile;'; comp_func :='alter function '|| c.owner|| '.'|| c.object_name|| ' compile;'; comp_trig :='alter trigger '|| c.owner|| '.'|| c.object_name|| ' compile;'; DBMS_OUTPUT.put_line ('Compile -> ' || c.object_name || ' type : ' || c.object_type); IF c.object_type = 'PACKAGE' THEN EXECUTE IMMEDIATE comp_pack; ELSIF c.object_type = 'PACKAGE BODY' THEN EXECUTE IMMEDIATE comp_pack_body; ELSIF c.object_type = 'VIEW' THEN EXECUTE IMMEDIATE comp_view; ELSIF c.object_type = 'PROCEDURE' THEN EXECUTE IMMEDIATE comp_proc; ELSIF c.object_type = 'FUNCTION' THEN EXECUTE IMMEDIATE comp_func; ELSIF c.object_type = 'TRIGGER' THEN EXECUTE IMMEDIATE comp_trig; END IF; --Exseption varsa yaxala və göstər EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.put_line ('Kampayl Xeta: '|| c.owner|| '.'|| c.object_name|| ' type => '|| c.object_type); END; END LOOP; END;