Invalid obyektlerin kampilasiyasi

261 views

Published on

Invalid obyektlerin kampilasiyasini generasiya eden skript

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
261
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Invalid obyektlerin kampilasiyasi

  1. 1. İnvalid obyektlərin kampayl etmək üçün generasiya edilən skriptBəzən verilənlər bazasında bəzi obyektlər invalid statusuna düşürlər. Bunun bir çox səbəbi olabilə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 invalidobyektlərin siyahısını tərtib edərək onları kampyl (compile) etmək olar. Lakin utlrp bir aztəhlükəlidir və biz bu utilitdən verilənlər bazasını upgrade-i zamanı istifadə edirik. (Yəni həmənzaman 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ğununnə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=TRIGGERunionselect ALTER FUNCTION ||OWNER||.||OBJECT_NAME|| COMPILE;from dba_objects where status=INVALID AND OBJECT_TYPE=FUNCTIONunionselect ALTER PACKAGE ||OWNER||.||OBJECT_NAME|| COMPILE BODY;from dba_objects where status=INVALID AND OBJECT_TYPE=PACKAGE BODYunionselect ALTER PROCEDURE ||OWNER||.||OBJECT_NAME|| COMPILE;from dba_objects where status=INVALID AND OBJECT_TYPE=PROCEDURENü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ə yaEXEC DBMS_UTILITY.COMPILE_SCHEMA(ULFET);Və nəhayət aşağıdakı kimi PLSQL anonym bloku yazıb icra edə bilərsiniz:
  2. 2. SQL> set serverouput onSQL> 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 BYobject_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;

×