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 08/05/2008, 13h59   #1
Invité de passage
 
Inscription : février 2007
Messages : 5
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 5
Points : 0
Points : 0
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
frsof est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2008, 15h27   #2
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 523
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 523
Points : 3 972
Points : 3 972
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.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2008, 19h14   #3
Invité de passage
 
Inscription : février 2007
Messages : 5
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 5
Points : 0
Points : 0
Par défaut re

je vous pas supprimer l'utilsateur completement seulement les objets
frsof est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2008, 19h50   #4
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 523
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 523
Points : 3 972
Points : 3 972
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.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2008, 14h47   #5
Membre confirmé
 
Avatar de JerryMouse
 
Homme N'Guessan KOUAME
Inscription : avril 2002
Messages : 210
Détails du profil
Informations personnelles :
Nom : Homme N'Guessan KOUAME
Localisation : Côte d'Ivoire

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

Informations forums :
Inscription : avril 2002
Messages : 210
Points : 270
Points : 270
Envoyer un message via MSN à JerryMouse Envoyer un message via Yahoo à JerryMouse
Si tu le fais à partir de forms, c'est simple:
Code :
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;
__________________
Très souvent, le plus difficile est de savoir ce que l'on veut.
JerryMouse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2008, 17h23   #6
Membre Expert
 
Avatar de scheu
 
Inscription : juin 2007
Messages : 1 497
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 1 497
Points : 1 485
Points : 1 485
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/
scheu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2008, 17h36   #7
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 534
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 534
Points : 6 471
Points : 6 471
Code :
DROP USER the_user CASCADE
c'est tellement simple et rapide de faire un CREATE USER juste après
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2008, 19h10   #8
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 523
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 523
Points : 3 972
Points : 3 972
Citation:
Envoyé par SheikYerbouti Voir le message
Code :
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.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2008, 10h57   #9
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

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

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
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 :
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 :
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
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2008, 11h04   #10
Membre chevronné
 
Avatar de philcero
 
Inscription : septembre 2007
Messages : 519
Détails du profil
Informations personnelles :
Âge : 40
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2007
Messages : 519
Points : 649
Points : 649
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...

philcero est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2008, 11h11   #11
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
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
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2008, 11h43   #12
Membre chevronné
 
Avatar de philcero
 
Inscription : septembre 2007
Messages : 519
Détails du profil
Informations personnelles :
Âge : 40
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2007
Messages : 519
Points : 649
Points : 649
Citation:
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 :
1
2
SELECT password FROM dba_users WHERE username='xxx';
A1B2C3D4...
Et ensuite il convient de le remettre.
Code :
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...
philcero est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2008, 13h01   #13
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

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

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
Citation:
Envoyé par philcero Voir le message
Code :
1
2
SELECT password FROM dba_users WHERE username='xxx';
A1B2C3D4...
Et ensuite il convient de le remettre.
Code :
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
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2008, 13h06   #14
Membre chevronné
 
Avatar de philcero
 
Inscription : septembre 2007
Messages : 519
Détails du profil
Informations personnelles :
Âge : 40
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2007
Messages : 519
Points : 649
Points : 649
Vu comme ça, je dis également vive le script de purge...

philcero est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2008, 13h38   #15
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 534
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 534
Points : 6 471
Points : 6 471
Voui, sauf que si le script de création du user est convenablement archivé, il est effectivement simple et rapide de le rejouer.
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2008, 15h50   #16
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 523
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 523
Points : 3 972
Points : 3 972
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...
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2008, 17h43   #17
Membre Expert
 
Avatar de scheu
 
Inscription : juin 2007
Messages : 1 497
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 1 497
Points : 1 485
Points : 1 485
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/
scheu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2008, 17h48   #18
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 523
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 523
Points : 3 972
Points : 3 972
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...
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2008, 19h24   #19
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

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

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
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...
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2008, 09h15   #20
Membre Expert
 
Avatar de scheu
 
Inscription : juin 2007
Messages : 1 497
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 1 497
Points : 1 485
Points : 1 485
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/
scheu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h50.


 
 
 
 
Partenaires

Hébergement Web