Volevo eliminare alcuni schemi inutilizzati sul nostro DB oracolo.
Come posso fare una query per tutti i nomi degli schemi?
Usare sqlplus
sqlplus / come sysdba
eseguire: pre> SELEZIONA * DA dba_users pre>
Se vuoi solo i nomi utente fai come segue pre> SELEZIONA il nome utente DA dba_users pre>
Molto probabilmente, vuoi
SELECT username
FROM dba_users
Questo vi mostrerà tutti gli utenti nel sistema (e quindi tutti i potenziali schemi). Se la vostra definizione di "schema" permette ad uno schema di essere vuoto, questo'è ciò che volete. Tuttavia, ci può essere una distinzione semantica in cui le persone vogliono chiamare qualcosa uno schema solo se possiede effettivamente almeno un oggetto, in modo da escludere le centinaia di account utente che non possiederanno mai alcun oggetto. In questo caso
SELECT username
FROM dba_users u
WHERE EXISTS (
SELECT 1
FROM dba_objects o
WHERE o.owner = u.username )
Assumendo che chiunque abbia creato gli schemi sia stato ragionevole nell'assegnare i tablespace di default e assumendo che non siate interessati agli schemi che Oracle ha fornito, potete filtrare quegli schemi aggiungendo dei predicati sul default_tablespace
, cioè
SELECT username
FROM dba_users
WHERE default_tablespace not in ('SYSTEM','SYSAUX')
o
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')
Non è terribilmente raro imbattersi in un sistema in cui qualcuno ha erroneamente dato ad un utente non di sistema un default_tablespace
di SYSTEM
, quindi siate certi che i presupposti reggano prima di provare a filtrare gli schemi consegnati da Oracle in questo modo.