Quería eliminar algunos esquemas no utilizados en nuestra base de datos de Oracle.
¿Cómo puedo consultar todos los nombres de esquema?
Quería eliminar algunos esquemas no utilizados en nuestra base de datos de Oracle.
¿Cómo puedo consultar todos los nombres de esquema?
Respuestas:
Usando sqlplus
sqlplus / as sysdba
correr:
SELECCIONE * DE dba_users
Si solo desea los nombres de usuario, haga lo siguiente:
Elija un nombre de usuario DE dba_users
Lo más probable es que quieras
SELECT username
FROM dba_users
Eso le mostrará todos los usuarios en el sistema (y por lo tanto todos los esquemas potenciales). Si su definición de "esquema" permite que un esquema esté vacío, eso es lo que desea. Sin embargo, puede haber una distinción semántica en la que las personas solo quieran llamar a algo un esquema si realmente posee al menos un objeto, de modo que se excluyen 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 )
Suponiendo que quien haya creado los esquemas fue sensato al asignar espacios de tabla predeterminados y asumiendo que no está interesado en los esquemas que Oracle ha entregado, puede filtrar esos esquemas agregando predicados en 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')
No es terriblemente raro encontrarse con un sistema en el que alguien ha dado forma incorrecta un no-sistema del usuario una default_tablespace
de SYSTEM
embargo, así que asegúrese de que las suposiciones son antes de tratar de filtrar los esquemas suministrados por Oracle de esta manera.
select distinct owner from dba_objects
?
SELECT username FROM all_users ORDER BY username;
dba_users
(por ejemplo: error 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'));
Qué tal si :
SQL> select * from all_users;
devolverá la lista de todos los usuarios / esquemas, sus ID y la fecha de creación en la base de datos:
USERNAME USER_ID CREATED
------------------------------ ---------- ---------
SCHEMA1 120 09-SEP-15
SCHEMA2 119 09-SEP-15
SCHEMA3 118 09-SEP-15
A continuación, sql enumera todos los esquemas en Oracle que se crean después de la instalación. ORACLE_MAINTAINED = 'N' es el filtro. Esta columna es nueva en 12c.
seleccione un nombre de usuario distinto, ORACLE_MAINTAINED de dba_users donde ORACLE_MAINTAINED = 'N';
Cualquiera de los siguientes SQL devolverá todos los esquemas en Oracle DB.
select owner FROM all_tables group by owner;
select distinct owner FROM all_tables;