Quería eliminar algunos esquemas no utilizados en nuestra BD de oracle.
¿Cómo puedo consultar todos los nombres de los esquemas?
Uso de sqlplus
sqlplus / como sysdba
ejecutar: pre> SELECT * FROM dba_users
Si sólo quieres los nombres de usuario haz lo siguiente
SELECT nombre de usuario FROM dba_users;
Lo más probable es que quiera
SELECT username
FROM dba_users
Eso le mostrará todos los usuarios del sistema (y por tanto todos los esquemas potenciales). Si su definición de "esquema" permite que un esquema esté vacío, eso es lo que quiere. Sin embargo, puede haber una distinción semántica en la que la gente sólo quiera llamar a algo esquema si realmente posee al menos un objeto, de modo que se excluyan los cientos de cuentas de usuario que nunca poseerán ningún objeto. En ese caso
SELECT username
FROM dba_users u
WHERE EXISTS (
SELECT 1
FROM dba_objects o
WHERE o.owner = u.username )
Asumiendo que quien creó los esquemas fue sensato a la hora de asignar tablespaces por defecto y asumiendo que no estás interesado en los esquemas que Oracle ha entregado, puedes filtrar esos esquemas añadiendo predicados en el default_tablespace
, es decir
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')
Sin embargo, no es muy raro encontrarse con un sistema en el que alguien ha dado incorrectamente a un usuario no perteneciente al sistema un default_tablespace
de SYSTEM
, así que asegúrate de que las suposiciones se mantienen antes de intentar filtrar los esquemas entregados por Oracle de esta manera.