Eu queria deletar alguns esquemas não utilizados em nosso banco de dados oracle.
Como posso consultar todos os nomes de esquema?
Eu queria deletar alguns esquemas não utilizados em nosso banco de dados oracle.
Como posso consultar todos os nomes de esquema?
Respostas:
Usando sqlplus
sqlplus / as sysdba
corre:
SELECIONE * FROM dba_users
Se você quiser apenas os nomes de usuário, faça o seguinte:
SELECIONE nome de usuário FROM dba_users
Provavelmente, você quer
SELECT username
FROM dba_users
Isso mostrará todos os usuários no sistema (e, portanto, todos os esquemas potenciais). Se sua definição de "esquema" permite que um esquema fique vazio, é isso que você deseja. No entanto, pode haver uma distinção semântica onde as pessoas só querem chamar algo de esquema se ele realmente possuir pelo menos um objeto, de forma que as centenas de contas de usuário que nunca possuirão nenhum objeto sejam excluídas. Nesse caso
SELECT username
FROM dba_users u
WHERE EXISTS (
SELECT 1
FROM dba_objects o
WHERE o.owner = u.username )
Supondo que quem criou os esquemas foi sensato ao atribuir espaços de tabela padrão e supondo que você não está interessado nos esquemas que o Oracle entregou, você pode filtrar esses esquemas adicionando predicados no default_tablespace
, ou seja,
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')
Não é terrivelmente incomum se deparar com um sistema em que alguém tenha dado incorretamente um usuário um não-sistema default_tablespace
de SYSTEM
, embora, de modo a certeza de que os pressupostos segurar antes de tentar filtrar os esquemas Oracle entregues desta forma.
select distinct owner from dba_objects
?
SELECT username FROM all_users ORDER BY username;
dba_users
(por exemplo: erro 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'));
E se :
SQL> select * from all_users;
ele retornará uma lista de todos os usuários / esquemas, seus IDs e data de criação no DB:
USERNAME USER_ID CREATED
------------------------------ ---------- ---------
SCHEMA1 120 09-SEP-15
SCHEMA2 119 09-SEP-15
SCHEMA3 118 09-SEP-15
Abaixo, o sql lista todos os esquemas no oracle que são criados após a instalação ORACLE_MAINTAINED = 'N' é o filtro. Esta coluna é nova em 12c.
selecione um nome de usuário distinto, ORACLE_MAINTAINED de dba_users onde ORACLE_MAINTAINED = 'N';
Qualquer um dos seguintes SQL retornará todo o esquema no banco de dados Oracle.
select owner FROM all_tables group by owner;
select distinct owner FROM all_tables;