Eu queria apagar alguns esquemas não utilizados no nosso oráculo DB.
Como posso consultar todos os nomes de esquemas?
Usando sqlplus
sqlplus / as sysdba
correr:
SELECCIONAR * DE dba_users Se você só quer que os nomes de usuário façam o seguinte:SELECIONE o nome de usuário DE dba_users
Muito provavelmente, você quer
SELECT username
FROM dba_users
Isso irá mostrar todos os usuários do sistema (e, portanto, todos os esquemas potenciais). Se a sua definição de "schema" permite que um esquema esteja vazio, isso'é o que você quer. No entanto, pode haver uma distinção semântica onde as pessoas só querem chamar esquema a algo se ele realmente possuir pelo menos um objeto, de modo 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 )
Assumindo que quem criou os esquemas foi sensato em atribuir tablespaces padrão e assumindo que você não está interessado nos esquemas que a Oracle entregou, você pode filtrar esses esquemas adicionando previsões 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')
No entanto, não é muito raro encontrar um sistema em que alguém tenha dado incorrectamente a um utilizador que não é um sistema um "espaço de tabelas por defeito" do "SISTEMA", por isso tenha a certeza de que as suposições se mantêm antes de tentar filtrar os esquemas fornecidos pelo Oracle desta forma.