Je voulais supprimer certains schémas inutilisés sur notre base de données oracle.
Comment puis-je rechercher tous les noms de schéma?
Je voulais supprimer certains schémas inutilisés sur notre base de données oracle.
Comment puis-je rechercher tous les noms de schéma?
Réponses:
Utilisation de sqlplus
sqlplus / comme sysdba
courir:
CHOISIR * DE dba_users
Si vous souhaitez uniquement les noms d'utilisateur, procédez comme suit:
SELECT nom d'utilisateur DE 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 à un schéma d'être vide, c'est ce que vous voulez. Cependant, il peut y avoir une distinction sémantique où les gens ne veulent appeler quelque chose un schéma que s'il possède réellement au moins un objet afin que les centaines de comptes d'utilisateurs qui ne posséderont jamais aucun objet soient 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 la personne qui a créé les schémas a eu raison d'attribuer des tablespaces par défaut et de supposer que vous n'êtes pas intéressé par les schémas fournis par Oracle, vous pouvez filtrer ces schémas en ajoutant des prédicats sur le default_tablespace
, c.-à-d.
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 terriblement rare de rencontrer un système dans lequel quelqu'un a incorrectement donné à un utilisateur non-système un default_tablespace
de SYSTEM
, alors assurez-vous que les hypothèses sont valables avant d'essayer de filtrer les schémas fournis par Oracle de cette manière.
select distinct owner from dba_objects
?
SELECT username FROM all_users ORDER BY username;
dba_users
(par exemple: erreur ORA-00942 : table or view does not exist
)
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 renverra la liste de tous les utilisateurs / schémas, leur ID et la date de création dans DB:
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 dans oracle qui sont créés après l'installation ORACLE_MAINTAINED = 'N' est le filtre. Cette colonne est nouvelle en 12c.
sélectionnez un nom d'utilisateur distinct, ORACLE_MAINTAINED à partir de 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;