Estou trabalhando em um projeto de migração de dados e cada desenvolvedor tem seu próprio conjunto de esquemas. (Alguns desenvolvedores saíram e alguns conjuntos de esquemas não são mais usados).
vicsz
Respostas:
130
Usando sqlplus
sqlplus / as sysdba
corre:
SELECIONE *
FROM dba_users
Se você quiser apenas os nomes de usuário, faça o seguinte:
No entanto, certifique-se de ter permissões para o seu usuário.
diagonalbatman
2
@Andy: é por isso que escrevi "como um usuário privilegiado";)
a_horse_with_no_name
@horse Desculpas eu perdi isso.
diagonalbatman
@a_horse_with_no_name isso significa que um esquema no oracle significa que é um usuário? Quero dizer um schema = user? e sob esse usuário todas as tabelas criadas mesmo como MySQL?
Osama Al-Banna de
66
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
WHEREEXISTS(SELECT1FROM 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 notin('SYSTEM','SYSAUX')
ou
SELECT username
FROM dba_users u
WHEREEXISTS(SELECT1FROM dba_objects o
WHERE o.owner = u.username )AND default_tablespace notin('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_tablespacede SYSTEM, embora, de modo a certeza de que os pressupostos segurar antes de tentar filtrar os esquemas Oracle entregues desta forma.
Respostas:
Usando sqlplus
sqlplus / as sysdba
corre:
Se você quiser apenas os nomes de usuário, faça o seguinte:
fonte
Provavelmente, você quer
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
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,ou
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
deSYSTEM
, embora, de modo a certeza de que os pressupostos segurar antes de tentar filtrar os esquemas Oracle entregues desta forma.fonte
select distinct owner from dba_objects
?fonte
dba_users
(por exemplo: erroORA-00942 : table or view does not exist
)fonte
E se :
ele retornará uma lista de todos os usuários / esquemas, seus IDs e data de criação no DB:
fonte
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.
fonte
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;
fonte