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

SQL Oracle Discussion :

Suppression de tous les objets d'un schéma


Sujet :

SQL Oracle

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 5
    Par défaut Suppression de tous les objets d'un schéma
    bonjour,
    Comment faire pour supprimer tous les objets d'un chema avec une requete sql

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par frsof Voir le message
    bonjour,
    Comment faire pour supprimer tous les objets d'un schéma avec une requête SQL ?
    Le plus simple est de supprimer le schéma et de le recréer ensuite.
    Question sémantique, une commande sql n'est pas nécessairement une requête.
    Dernière modification par Invité ; 08/05/2008 à 16h39.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 5
    Par défaut re
    je vous pas supprimer l'utilsateur completement seulement les objets

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par frsof Voir le message
    je vous pas supprimer l'utilsateur completement seulement les objets
    Ben c'est ce qui est de plus simple et ce que l'on fait dans la pratique.
    Sinon tu peux regarder les objets de ton user dans user_objects et générer un script pour supprimer ses objets mais tu avoueras que c'est bien moins évident.

  5. #5
    Membre expérimenté Avatar de JerryMouse
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 215
    Par défaut
    Si tu le fais à partir de forms, c'est simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For Ng In (Select Object_Name, Object_Type from User_Objects)
    Loop
      Form_DDL('Drop '||Ng.Object_Type||' '||Ng.Object_Name);
    End Loop;

  6. #6
    Membre Expert Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Par défaut
    Sauf qu'il risque d'être embêté s'il existe des contraintes (FK) entre les tables, où alors il faut désactiver d'abord toutes les contraintes (en 2 temps : d'abord les foreign key, ensuite toutes les autres)
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

  7. #7
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DROP USER the_user CASCADE
    c'est tellement simple et rapide de faire un CREATE USER juste après

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par SheikYerbouti Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DROP USER the_user CASCADE
    c'est tellement simple et rapide de faire un CREATE USER juste après
    Merci d'abonder dans mon sens.

  9. #9
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    attention avant d'employer ce script
    il faut avoir un backup de sa base
    ce script est dynamique et très destructeur et quasi non testé


    Citation Envoyé par SheikYerbouti Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DROP USER the_user CASCADE
    c'est tellement simple et rapide de faire un CREATE USER juste après
    parfois oui, parfois non.

    D'abord, il faut connaitre tous les privileges de l'utilisateur, ensuite, il faut avoir le droit DROP USER, CREATE USER et regénérer tous les droits.

    un loop ça me parait être une bonne solution aussi.

    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
     
    SQL> select object_type,count(*) from user_objects group by object_type
     
    OBJECT_TYPE           COUNT(*)
    ------------------- ----------
    INDEX                        7
    PROCEDURE                    1
    TYPE                         6
    TABLE                      120
    DATABASE LINK                1
    LOB                          1
     
    SQL> purge recyclebin
    Purge successfully completed.
    SQL> begin
    for f in (select table_name from user_tables) loop
      execute immediate 'drop table "'||f.table_name||'" cascade constraints';
    end loop;
    for f in (select object_type, object_name from user_objects 
        where object_type in ('SEQUENCE','VIEW','FUNCTION','PROCEDURE','PACKAGE','SYNONYM','DATABASE LINK')) loop
      execute immediate 'drop '||f.object_type||' "'||f.object_name||'"';
    end loop;
    for f in (select type_name from user_types) loop
      execute immediate 'drop type "'||f.type_name||'" force';
    end loop;
    end;
    PL/SQL procedure successfully completed.
    SQL> select count(*) from user_objects
     
      COUNT(*)
    ----------
             0

    bon, c'est pas "simple" et ça demande quelques efforts de programmation et de maintenance pour ne rien manquer, mais c'est plus portable que drop user, ça ne demande pas de privilege spécial et c'est plus sûr, car on ne change ni le mot de passe ni le quota ni le rôle ni l'historique des mots de passes et des tentatives infractueuses.

    Chacun ces goûts.

    Moi j'aime bien drop user

  10. #10
    Membre émérite Avatar de philcero
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2007
    Messages : 528
    Par défaut
    On m'avait donné une astuce il y a quelques années qui consistait à utiliser une fonction d'OEM.
    1. On lance OEM et on va sur sa babase là où sont les USERS.
    2. On fait clic droit sur le vilain et on fait un truc du style "créer comme...", une fenêtre s'ouvre, on la réserve. Faut surtout pas la perdre.
    3. On fait à nouveau un clic droit sur le vilain et on lui fait la peau.
    4. On revient sur le formulaire qui a un peu refroidi et on ré-entre le nom du compte et le mot de passe.
    5. Il n'y a plus qu'à valider le Formulaire qui va re-créer le compte à l'identique.
    OK, c'est pas du script mais c'est vachement pratique en tout cas...


  11. #11
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Attention, OEM ne connait pas le password du user copié et les privilèges grantés sur des objets d'autres schémas ne sont pas récupéré... ce n'est donc pas super non plus.

    En revanche, on doit pouvoir trouver un contournement avec import ROWS=N

  12. #12
    Membre émérite Avatar de philcero
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2007
    Messages : 528
    Par défaut
    OEM ne connait pas le password du user copié
    En effet, il faut donc le récupérer avant sous sa forme fantôme.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select password from dba_users where username='xxx';
    A1B2C3D4...
    Et ensuite il convient de le remettre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter user xxx identified by values 'A1B2C3D4...';
    Par contre pour les objets grantés je savais pas. Cela ne m'a pas posé de problèmes jusqu'ici étant donné que la plus part de mes bases ont été cloisonnées mono-compte...

  13. #13
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    Citation Envoyé par philcero Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select password from dba_users where username='xxx';
    A1B2C3D4...
    Et ensuite il convient de le remettre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter user xxx identified by values 'A1B2C3D4...';
    Ca c'est du 10g et plus vieux. Dans 11g, il n'y a plus de passwords dans dba_users

    http://laurentschneider.com/wordpres...es-in-11g.html

    Ensuite, il y a les quotas, les accomptes qui sont bloqués, les tablespaces temp et data par défaut, et pleins d'autres subtilités qui font qu'à la fin la solution de facilité n'est plus si facile

  14. #14
    Membre émérite Avatar de philcero
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2007
    Messages : 528
    Par défaut
    Vu comme ça, je dis également vive le script de purge...


  15. #15
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Voui, sauf que si le script de création du user est convenablement archivé, il est effectivement simple et rapide de le rejouer.

  16. #16
    Invité
    Invité(e)
    Par défaut
    C'est tout de même prudent d'avoir toujours un script de création du user sous le coude, rien que pour pouvoir le dupliquer ou pour le recréer rapidement.
    Je ne connais pas de manière automatique pour récupérer un script complet, il manque toujours des droits, donc je mets le script à jour à la main.

    Et c'est bien plus simple pour créer ensuite un environement de dev ou preprod, rapidement...

    Enfin, chacun sa méthode...

  17. #17
    Membre Expert Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Par défaut
    Je rejoins l'idée d'orafrance sur l'export du user sans les données pour être sûr de ne rien oublier
    En plus l'import avec "imp ... show=y" ça permet de récupérer le script complet de recréation du user si on veut le recréer à la main plutôt qu'avec l'import
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

  18. #18
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par scheu Voir le message
    En plus l'import avec "imp ... show=y" ça permet de récupérer le script complet de recréation du user si on veut le recréer à la main plutôt qu'avec l'import
    Pas bête ! J'y pense jamais à cette option...

  19. #19
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    Citation Envoyé par SheikYerbouti Voir le message
    Voui, sauf que si le script de création du user est convenablement archivé, il est effectivement simple et rapide de le rejouer.
    Oui, dans ce cas je prefere largement la solution CREATE USER

    Citation Envoyé par scheu
    imp ... show=y
    Comment tu obtiens les table grants? un exemple stpl...

  20. #20
    Membre Expert Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Par défaut
    Citation Envoyé par laurentschneider Voir le message
    Comment tu obtiens les table grants? un exemple stpl...
    Effectivement il manquerait juste les grants qu'à le user sur les objets des autres schémas
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

Discussions similaires

  1. Trouver tous les objets d'un schéma
    Par Celestos dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 20/05/2010, 15h24
  2. Comment donner des droits sur tous les objets d'un schéma
    Par farenheiit dans le forum Administration
    Réponses: 2
    Dernier message: 07/06/2007, 17h27
  3. Trouver tous les objets d'un certain type dans un document?
    Par kobe dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 03/11/2005, 18h07
  4. Suppression de tous les fichiers textes d'un répertoire
    Par Cathy dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 20/09/2005, 18h11
  5. Rafraichissement de la fiche ainsi que de tous les objets
    Par portu dans le forum Composants VCL
    Réponses: 7
    Dernier message: 06/01/2004, 01h25

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