bonjour,
Je voulais savoir comment réagi Oracle si on recompile un programme (procédure stockée, trigger ou autre ) pendant l'exécution de ce dernier?
est ce que ça invalide le programme? ça l'arrête?
MErci d'avance pour vos réponses.
Djam
bonjour,
Je voulais savoir comment réagi Oracle si on recompile un programme (procédure stockée, trigger ou autre ) pendant l'exécution de ce dernier?
est ce que ça invalide le programme? ça l'arrête?
MErci d'avance pour vos réponses.
Djam
Il t'envoie promener en te disant qu'il est en cours d'utilisation. Au pire, ta compilation plante (sans réponse), mais l'exécution continuera.
Bonjour,
eh bien Non , ni l'un ni l'autre , il attendra ... que la procedure se termine et apres la compilation se lance .
Tu Peux t'amuser avec
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 create OR REPLACE PROCEDURE PROC_1 as BEGIN dbms_output.put_line ('PROC_NAME : PROC1 '); end; create OR REPLACE PROCEDURE PROC_2 as BEGIN dbms_output.put_line ('PROC_NAME : PROC2 '); FOR i IN 1..6 LOOP IF MOD(i,2) = 0 THEN DBMS_OUTPUT.PUT_LINE('Loop PROC_2 is ' || i); END IF; END LOOP; end; create OR REPLACE PROCEDURE PROC_A as BEGIN dbms_output.put_line ('PROC_NAME : PROCA '); PROC_1; dbms_lock.sleep (20); PROC_2; end; CREATE OR REPLACE PROCEDURE PROC_3 as begin for i in REVERSE 1..20 loop dbms_output.put_line('LOOP PROC_3 :'||i); end loop; end; create OR REPLACE PROCEDURE PROC_A as BEGIN dbms_output.put_line ('PROC_NAME : PROCA '); PROC_3; dbms_lock.sleep (20); PROC_2; end;
dans une session tu lances
dans une autre tu lances
Code : Sélectionner tout - Visualiser dans une fenêtre à part exec proc_A
Code : Sélectionner tout - Visualiser dans une fenêtre à part alter procedure proc_A compile;
Je ne suis pas sûr qu'il va t'envoyer te promener (surtout pas par un temps pareil).
Je dirais plutôt que l'ordre de compilation va attendre la fin de l'exécution pour acquérir le verrou adéquat et se terminer normalement.
Il me semblait qu'il lockait le package et du coup, renvoyait une réponse.
Par contre, si la compilation se fait avec un logiciel genre toad, celui-ci ne rendra pas la main (ce que j'entendais par "plante") vu qu'il attendra la fin de l'exécution.
D'une manière générale, il vaut mieux éviter ce petit jeu.
Je ne vois pas pourquoi il faudra éviter cela.D'une manière générale, il vaut mieux éviter ce petit jeu.
La mise en commun des ressources et la gestion des accès concurrents à ces ressources sont des fonctionnalités importantes que nous proposent les SGBD, alors pourquoi s'en priver !!!!
Rachid
Quand je modifie un package, je préfère être sûr que personne ne l'utilise. Sinon celui qui l'utilise pourrait avoir des surprises. Pour moi, c'est une sécurité évidente...
(même si ce cas de figure ne se présente normalement que sur des bases de dev/test)
Tu as bien vu qu'il attend que la transaction qui veut modifier la procedure attend celle qui l'utilise finisse son travail avent de faire quoi que ce soit ...
Donc si t'est en 7/7 24/24 h tu ne feras aucun mise a jour sur un site Internet accedé en permanence ???
Oracle n'est pas Myql ni Ms Excel ni Ms Access ???
Dans ce cas précis, on sait qu'une transaction est en cours sur ce package.
Si on le compile sans savoir et qu'une transaction (exécution) a lieu après la compilation, celui qui l'utilise peut avoir un résultat autre que celui qu'il attendait car non informé de la modification.
Effectivement c'est bien utile dans ce cas.
Ma vision est un peu restreinte à des applis autre qu'Internet, où les mises en production ont lieu en dehors de toute activité.
Merci pour vos réponse :-)
bonne journée
Djam
Partager