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?
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
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.
SELECT username FROM all_users ORDER BY username;
select distinct owner
from dba_segments
where owner in (select username from dba_users where default_tablespace not in ('SYSTEM','SYSAUX'));
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
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';
L’un ou l’autre des SQL suivants renverra tout le schéma dans Oracle DB.
select owner FROM all_tables group by owner;
select distinct owner FROM all_tables;