IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration Oracle Discussion :

La vue all_synonym contient des synonymes qui n'existent pas


Sujet :

Administration Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de bankette
    Homme Profil pro
    Chef de Projet Web
    Inscrit en
    Mars 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de Projet Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2007
    Messages : 135
    Par défaut La vue all_synonym contient des synonymes qui n'existent pas
    Bonjour a tous

    Voila, j'ai un petit souci avec Oracle 10G.
    Mon problème est assez simple, j'ai un script de nettoyage de schémas qui après avoir supprimer mes schémas, suppriment tous les synonymes associés.

    Prenons un exemple pour expliquer mon problème :
    Dans la table all_synonym j'ai le synonym "toto" avec un owner "bankette", je viens de supprimer le schéma bankette ainsi que toutes les tables lui appartenant.
    Lorsque je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    drop public synonym bankette.toto;
    -- public synonym to be dropped doesn't exist
    Du coup vu que je suis dans un script automatique, ça plante...

    Est ce que vous sauriez :
    1. Comment je peux avoir un synonyme qui n'existe pas?
    2. Comment je peux le supprimer de cette vue?

    Merci d'avance ,
    Julien

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Vérifiez qu'il s'agit bien d'un synonyme publique et non d'un synonyme privé.

    Pouvez-vous reproduire le problème avec un petit script et poster ce script et son exécution ?

  3. #3
    Membre confirmé Avatar de bankette
    Homme Profil pro
    Chef de Projet Web
    Inscrit en
    Mars 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de Projet Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2007
    Messages : 135
    Par défaut
    Voici le script en question :
    Code : 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
     
    declare
     
    oneDropStatement varchar2(100) ;
     
     
    cursor dropStatement is 
    select 'drop user ' || usr.username || ' cascade' as exec from all_users usr
    where  usr.username like '%DBA'
    union all
    SELECT
    (CASE
    WHEN owner = 'PUBLIC'
    THEN 'drop public synonym '||synonym_name
    Else
    'drop synonym '||owner||'.'||synonym_name
    END)  as exec
    FROM all_synonyms
    WHERE (table_owner LIKE '%DBA');
     
    begin
    for oneStatement in dropStatement loop
    begin
         oneDropStatement := oneStatement.exec;
         dbms_output.put_line(oneDropStatement);
         execute immediate oneDropStatement ;
    end ;
    end loop ;
     
    end ;
     
    /
     
    exit ;
    Donc le probleme du public qui est peut etre privé ne se pose pas, car il est defini comme public dans la table all_synonym.

    Merci pour la reponse rapide !

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2005
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 316
    Par défaut
    bonjour,
    j'ai peut-être loupé un truc mais d'apres le script vous ne devriez pas avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DROP public synonym bankette.toto;
    puisque le owner est mis que si il est different de PUBLIC

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Il faut bien supprimer le synonyme publique après avoir supprimé le schéma et comme déjà dit sans préfixer le synonyme publique par le nom du schéma puisqu'un synonyme publique est un objet global qui n'appartient pas à un schéma donné:


    Code : 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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    SQL> select * from v$version;
     
    BANNER
    ----------------------------------------------------------------
    Oracle Database 10g Express Edition Release 10.2.0.1.0 - Product
    PL/SQL Release 10.2.0.1.0 - Production
    CORE    10.2.0.1.0      Production
    TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
    NLSRTL Version 10.2.0.1.0 - Production
     
    SQL> drop user test cascade;
    drop user test cascade
              *
    ERROR at line 1:
    ORA-01918: user 'TEST' does not exist
     
     
    SQL> drop public synonym t;
    drop public synonym t
                        *
    ERROR at line 1:
    ORA-01432: public synonym to be dropped does not exist
     
     
    SQL>
    SQL> create user test identified by test quota unlimited on users default tables
    pace users;
     
    User created.
     
    SQL> grant create session, create table, create public synonym to test;
     
    Grant succeeded.
     
    SQL>
    SQL>
    SQL> connect test/test;
    Connected.
    SQL> create table t(x int);
     
    Table created.
     
    SQL> create public synonym t for t;
     
    Synonym created.
     
    SQL>
    SQL> connect / as sysdba
    Connected.
    SQL> drop user test cascade;
     
    User dropped.
     
    SQL> select owner, synonym_name from dba_synonyms where synonym_name='T';
     
    OWNER                          SYNONYM_NAME
    ------------------------------ ------------------------------
    PUBLIC                         T
     
    SQL> drop public synonym test.t;
    drop public synonym test.t
                            *
    ERROR at line 1:
    ORA-00933: SQL command not properly ended
     
     
    SQL> drop public synonym t;
     
    Synonym dropped.

  6. #6
    Membre confirmé Avatar de bankette
    Homme Profil pro
    Chef de Projet Web
    Inscrit en
    Mars 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de Projet Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2007
    Messages : 135
    Par défaut
    Ouups !!!

    Désolé, c'est moi, en fait mon script retourne la commande suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DROP public synonym toto;
    -- public synonym to be dropped doesn't exist
    Il n'y a pas de owner, désolé pour l'erreur.

    Donc le synonyme public toto existe dans all_synonyms mais n'existe pas en réalité, c'est la mon problème.

    Merci,
    Julien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Retourner des enregistrements qui n'existent pas
    Par Cryos dans le forum Développement
    Réponses: 2
    Dernier message: 31/01/2014, 11h15
  2. insertion des numéros qui n'existe pas dans la base de données
    Par cisco.nat dans le forum Général Java
    Réponses: 5
    Dernier message: 09/07/2013, 12h39
  3. Réponses: 1
    Dernier message: 11/05/2011, 14h38
  4. [XSL][re] Ecrire des balise qui ne seront pas interpretées
    Par FrRoulio dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 17/03/2004, 12h32
  5. la liste des clients qui n'ont pas acheter aucun article ...
    Par TéBeSsI dans le forum Langage SQL
    Réponses: 6
    Dernier message: 13/02/2004, 14h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo