web-dev-qa-db-fra.com

Oracle SQL Query pour lister tous les schémas d'une base de données

Je voulais supprimer certains schémas inutilisés sur notre base de données Oracle. 

Comment puis-je interroger tous les noms de schéma?

78
vicsz

Utiliser sqlplus

sqlplus/as sysdba

courir:

 SELECT * 
 FROM dba_users 

Si vous ne voulez que les noms d'utilisateur, procédez comme suit:

 SELECT nom d'utilisateur 
 FROM dba_users 
113

Très probablement, vous voulez

SELECT username
  FROM dba_users

Cela vous montrera tous les utilisateurs du système (et donc tous les schémas potentiels). Si votre définition de "schéma" permet de vider un schéma, c'est ce que vous voulez. Cependant, il peut exister une distinction sémantique selon laquelle les personnes ne veulent appeler quelque chose un schéma que si elle possède réellement au moins un objet, de sorte que les centaines de comptes utilisateur qui ne posséderont jamais aucun objet sont exclus. Dans ce cas

SELECT username
  FROM dba_users u
 WHERE EXISTS (
    SELECT 1
      FROM dba_objects o
     WHERE o.owner = u.username )

En supposant que celui qui a créé les schémas ait voulu attribuer des espaces de table par défaut et en supposant que les schémas livrés par Oracle ne vous intéressent pas, vous pouvez les filtrer en ajoutant des prédicats sur le default_tablespace, i.e.

SELECT username
  FROM dba_users
 WHERE default_tablespace not in ('SYSTEM','SYSAUX')

ou

SELECT username
  FROM dba_users u
 WHERE EXISTS (
    SELECT 1
      FROM dba_objects o
     WHERE o.owner = u.username )
   AND default_tablespace not in ('SYSTEM','SYSAUX')

Il n'est pas très rare de rencontrer un système dans lequel une personne a incorrectement attribué à un utilisateur non-système un default_tablespace de SYSTEM, alors assurez-vous que les hypothèses sont vérifiées avant d'essayer de filtrer les schémas fournis par Oracle de cette façon.

58
Justin Cave
SELECT username FROM all_users ORDER BY username;
21
suhprano
select distinct owner 
from dba_segments
where owner in (select username from dba_users where default_tablespace not in ('SYSTEM','SYSAUX'));
7
FeRtoll

Que diriez-vous :

SQL> select * from all_users;

il retournera la liste de tous les utilisateurs/schémas, leurs identifiants et la date créée dans la base de données:

USERNAME                          USER_ID CREATED
------------------------------ ---------- ---------
SCHEMA1                         120 09-SEP-15
SCHEMA2                         119 09-SEP-15
SCHEMA3                         118 09-SEP-15
3
mauek unak

Ci-dessous, sql répertorie tous les schémas Oracle créés après l'installation Oracle_MAINTAINED = 'N' est le filtre. Cette colonne est nouvelle dans 12c.

sélectionnez un nom d'utilisateur distinct, Oracle_MAINTAINED à dba_users où Oracle_MAINTAINED = 'N';
1
sidnakoppa

L’un ou l’autre des SQL suivants renverra tout le schéma dans Oracle DB. 

  1. select owner FROM all_tables group by owner;
  2. select distinct owner FROM all_tables;
0
Sreeju