Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/04/2011, 17h04   #1
Membre confirmé
 
Avatar de jamesleouf
 
Homme
Ingénieur développement logiciels
Inscription : juillet 2005
Messages : 513
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 26
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : juillet 2005
Messages : 513
Points : 215
Points : 215
Par défaut Oracle: impact d'une suppression de table liée à une vue

Bonjour,

en admettant que l'on ait une vue crée à partir d'une jointure entre plusieurs tables.
Que se passe t-il lorsque l'on supprime l'une d'entre elles? ou toutes?
(avant de les recréer et en sachant qu'il n'y aura pas de select sur les vues pendant le temps intermédiaire)

Je ne trouve pas grand chose sur ce sujet sur le net, et je ne peux pas vraiment faire le test grandeur nature pour le moment...
__________________
James PaBond
http://www.greenquizz.com/
jamesleouf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2011, 17h18   #2
Membre Expert
 
Avatar de pachot
 
Homme Franck Pachot
DBA Oracle
Inscription : novembre 2007
Messages : 703
Détails du profil
Informations personnelles :
Nom : Homme Franck Pachot
Âge : 41
Localisation : Suisse

Informations professionnelles :
Activité : DBA Oracle
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2007
Messages : 703
Points : 1 630
Points : 1 630
Bonjour,
La vue sera simplement invalidée.
si on fait un select dessus lorsaue les tables sont plus là, il y aura une erreur.
si on fait un select dessus lorsaue les tables sont plus là, elle deviendra à nouveau valide.
Cordialement,
Franck.
__________________
A lire sur mon blog Oracle - Articles d'Experts des articles traduits en français de Jonathan Lewis, Tom Kyte, Doug Burns, Cary Millsap, Greg Rahn ...
pachot est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 05/04/2011, 17h28   #3
Membre expérimenté
 
François
Inscription : février 2010
Messages : 305
Détails du profil
Informations personnelles :
Nom : François

Informations forums :
Inscription : février 2010
Messages : 305
Points : 535
Points : 535
Bonjour,

Faire un test ca peut-etre tout petit. Ca ne signifie pas toucher a des vrais objets.

Sans compter que ca donne confiance dans le résultat, au lieu de se baser sur la réponse d'un inconnu trouve sur un forum.
(Je veux pas dire que les gens disent n'importe quoi volontairement)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CREATE TABLE tmp (n number, padding varchar2(10));
CREATE TABLE tmp2(n number, padding varchar2(10));
begin
FOR i IN 1..10 loop
   INSERT INTO tmp VALUES (i,lpad(i,10,'x'));
   INSERT INTO tmp2 VALUES (i,lpad(i,10,'y'));
end loop;
end;
/
CREATE VIEW tmp_view AS (SELECT t1.n AS n,t1.padding AS padd1, t2.padding AS padd2 FROM tmp t1, tmp2 t2 WHERE t1.n=t2.n);
   SELECT * FROM tmp_view;
   DROP TABLE tmp2;
   SELECT * FROM tmp_view;
 
DROP TABLE tmp;
DROP TABLE tmp2;
DROP VIEW tmp_view;
Rams7s est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 05/04/2011, 18h02   #4
Membre confirmé
 
Avatar de jamesleouf
 
Homme
Ingénieur développement logiciels
Inscription : juillet 2005
Messages : 513
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 26
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : juillet 2005
Messages : 513
Points : 215
Points : 215
Merci bien à vous deux.
Ca me rassure.

Je sais bien que l'on peut faire un test vite fait, mais je me disais qu'un petit test ne répondrais pas à toutes mes questions/appréhensions.

Je trouve cela étonnant que la vue reste présente lorsque l'une des tables sur laquelle elle est basée est supprimée.

Merci beaucoup
__________________
James PaBond
http://www.greenquizz.com/
jamesleouf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2011, 18h12   #5
Rédacteur
 
Inscription : décembre 2002
Messages : 2 385
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 385
Points : 3 261
Points : 3 261
Citation:
Envoyé par jamesleouf Voir le message
Je trouve cela étonnant que la vue reste présente lorsque l'une des tables sur laquelle elle est basée est supprimée.
Étonnant peut-être, mais pratique, non ?
Car les dépendances entre objets sont nombreuses, et parfois en cascade sur plusieurs niveaux (entre tables, vues, synonymes, procédures, fonctions, paquetages, déclencheurs, etc).
Si tous les objets dépendants (directement ou en cascade) étaient supprimés dès qu'un objet référencé est modifié ou supprimé, ça serait une sacrée galère.
Mais non, dans le pire de cas, vous aurez des objets invalides, qui redeviendront valides après avoir rétabli les objets manquants.
Et dans le meilleur des cas, vous ne vous rendrez même pas compte de l'absence temporaire d'un objet.
__________________
Consultant / formateur Oracle indépendant
Certifié OCP 10g et 11g, sécurité 11g
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 06/04/2011, 11h42   #6
Membre confirmé
 
Avatar de jamesleouf
 
Homme
Ingénieur développement logiciels
Inscription : juillet 2005
Messages : 513
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 26
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : juillet 2005
Messages : 513
Points : 215
Points : 215
oui c'est clair.
Mais, en imaginant qu'il y a une requête qui s'exécute sur la vue, au moment ou l'une des tables qui lui est liée est supprimée, ça ferait sans doute un gros bug... Surtout si l'Exception n'est pas gérée... non?

Merci beaucoup à tout le monde.
__________________
James PaBond
http://www.greenquizz.com/
jamesleouf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2011, 14h02   #7
Membre Expert
 
Avatar de pachot
 
Homme Franck Pachot
DBA Oracle
Inscription : novembre 2007
Messages : 703
Détails du profil
Informations personnelles :
Nom : Homme Franck Pachot
Âge : 41
Localisation : Suisse

Informations professionnelles :
Activité : DBA Oracle
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2007
Messages : 703
Points : 1 630
Points : 1 630
Citation:
Envoyé par jamesleouf Voir le message
Surtout si l'Exception n'est pas gérée...
Exact.
Il peut toujours se produire une erreur. Il ne faut jamais ignorer les exceptions
__________________
A lire sur mon blog Oracle - Articles d'Experts des articles traduits en français de Jonathan Lewis, Tom Kyte, Doug Burns, Cary Millsap, Greg Rahn ...
pachot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2011, 14h59   #8
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 311
Points : 5 808
Points : 5 808
Citation:
Envoyé par jamesleouf Voir le message
oui c'est clair.
Mais, en imaginant qu'il y a une requête qui s'exécute sur la vue, au moment ou l'une des tables qui lui est liée est supprimée, ça ferait sans doute un gros bug... Surtout si l'Exception n'est pas gérée... non?
Je ne pense pas

Code :
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
 
Connected TO Oracle DATABASE 10g Enterprise Edition Release 10.2.0.4.0 
Connected AS mni
 
SQL> 
SQL> CREATE TABLE t_ddl AS
  2  SELECT *
  3    FROM all_objects
  4  /
 
TABLE created
SQL> CREATE VIEW w_t_ddl AS
  2  SELECT *
  3    FROM t_ddl
  4  /
 
VIEW created
SQL> CREATE OR REPLACE FUNCTION Folle RETURN Number IS
  2    Pragma Autonomous_Transaction;
  3  Begin
  4    Execute Immediate 'Drop table t_ddl';
  5    --
  6    RETURN 1;
  7  Exception
  8    When Others Then RETURN NULL;
  9  End;
 10  /
 
FUNCTION created
SQL> SELECT count(*)
  2    FROM w_t_ddl
  3  /
 
  COUNT(*)
----------
     24878
 
SQL>
Et ensuite
Code :
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
 
SQL> SET autotrace traceonly
SQL> SELECT object_id, folle()
  2    FROM w_t_ddl
  3  /
 
24878 ligne(s) sélectionnée(s).
 
 
Plan d'exécution
----------------------------------------------------------
ERROR:
ORA-04063: view "MNI.W_T_DDL" comporte des erreurs
 
 
SP2-0612: Erreur lors de la génération de l'état AUTOTRACE EXPLAIN
 
Statistiques
----------------------------------------------------------
      99943  recursive calls
         78  db block gets
       2223  consistent gets
        315  physical reads
      14740  redo size
     543031  bytes sent via SQL*Net TO client
      18730  bytes received via SQL*Net FROM client
       1660  SQL*Net roundtrips TO/FROM client
         18  sorts (memory)
          0  sorts (disk)
      24878  rows processed
On peut voir que toutes les lignes ont été sélectionnées et que la vue w_t_ddl est devenu ensuite inutilisable.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h55.


 
 
 
 
Partenaires

Hébergement Web