Como ver a lista de bancos de dados no Oracle?

33

Existe um equivalente à SHOW DATABASESinstrução MySQL ?

É possível encontrar bancos de dados em um cluster? ou seja, bancos de dados presentes na rede em algum outro sistema?

Posso analisar os arquivos presentes em uma instalação Oracle para encontrar o mesmo?

Dadas as credenciais completas de acesso a um sistema Oracle, como você enumeraria todos os bancos de dados existentes?

Kshitiz Sharma
fonte
4
Observe também que há uma incompatibilidade terminológica entre o MySQL e o Oracle Database. Em termos de arquitetura, o Oracle possui tabela-> esquema-> banco de dados e, ao mesmo tempo, tabela-> tablespace-> banco de dados. O MySQL simplesmente tem tabela-> banco de dados. Então, talvez você esteja realmente procurando pela lista de esquemas Oracle (pense em namespaces SQL para tabelas) ou na lista de espaços de tabelas Oracle (pense em grupos de arquivos do SO para tabelas).
Kubanczyk

Respostas:

22

Existe um equivalente à SHOW DATABASESinstrução MySQL ?

Não existe tal coisa. Você pode consultar os ouvintes em uma máquina ( lsnrctl status) para ver quais serviços estão registrados lá, mas isso não é mapeado individualmente para o banco de dados (e pode haver vários ouvintes na mesma máquina). Caso contrário, as ferramentas usadas normalmente se conectam a uma instância de banco de dados e uma instância pertence a um único banco de dados.

Se você está falando sobre clusters Oracle RAC, cada instância conhece seus pares (outras instâncias que atendem ao mesmo banco de dados) e você pode encontrar as outras instâncias atualmente iniciadas para esse banco de dados usando a gv$instanceexibição.
Você também pode usar o crsctlutilitário para listar os serviços (incluindo bancos de dados) registrados no cluster e seu status.
Se você está falando sobre o software de cluster de outro fornecedor, tenho certeza de que todos eles têm esses tipos de utilitários de gerenciamento de recursos para consultar.

Se você está falando de apenas um monte de máquinas, não, não há uma maneira 100% confiável de enumerar todos os bancos de dados em uma rede.

Para encontrar bancos de dados ativos (ou seja, iniciados), procure *_pmon_*processos no Unix (existe um por instância do banco de dados) e serviços Oracle no Windows.

Para localizar instalações do software de banco de dados Oracle, consulte o /etc/oratabUnix. Isso deve conter todos os ORACLE_HOMEs instalados. Você pode olhar para dentro de cada um deles em $ORACLE_HOME/dbspara spfile<SID>.orae / ou init<SID>.oraarquivos - haverá um para cada banco de dados.

(Acredito que você possa encontrar o equivalente das informações nas oratabchaves de registro do Windows abaixo HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE, mas não conheço sua estrutura.)

Agora, é claro, se você registrou todo o seu banco de dados em um servidor OEM (Enterprise Manager) quando os instalou, pode encontrar a lista completa lá - mas acho que se você está perguntando, esse não é o caso.

Esteira
fonte
12

Oracle não possui bancos de dados, mas esquemas, você pode listá-los com

SELECT USERNAME FROM ALL_USERS ORDER BY USERNAME; 

ou algo parecido com isto :

SELECT TABLESPACE_NAME FROM USER_TABLESPACES;
DevYudh
fonte
2
Os espaços de tabela não estão vinculados a esquemas em geral.
Mat
2
TODOS OS USUÁRIOS? USER_TABLESPACES?
precisa saber é o seguinte
"Existe um equivalente à instrução MySQL SHOW DATABASES?" Estou tentando responder a essa pergunta. não diga u não sei
DevYudh
1
@ DevYudh: um espaço de tabela no Oracle é algo completamente diferente de um "banco de dados" no MySQL. A primeira consulta se estiver correta, a segunda consulta é errado planície
a_horse_with_no_name
11

Simplesmente, não há analogia direta para os 'bancos de dados' do MySQL ou um 'cluster' no Oracle: a correspondência mais próxima é um 'esquema', mas ainda é muito diferente.

Aparentemente, isso vai mudar no 12c com a introdução de bancos de dados conectáveis:

Dividir as operações do banco de dados de maneira limpa do conteúdo do usuário é uma grande transformação das arquiteturas tradicionais de banco de dados. O Oracle 11g, e todos os seus antecessores, só podiam executar um banco de dados por vez, disse Kyte. Se uma organização quisesse executar vários bancos de dados em um único servidor, seria necessário executar várias instâncias do Oracle 11g, uma para cada banco de dados. Como o nome indica, os bancos de dados conectáveis ​​permitem que vários bancos de dados inquilinos sejam executados sob uma cópia do Oracle 12c.

Jack Douglas
fonte
Uh grande, mais complicação, mais segurança no emprego ...
kubanczyk
6

Eu acho que uma resposta para futuros navegadores no * nix poderia ser:

cat / etc / oratab

rlblyler
fonte
3

Basta conectar-se ao ASM e verificar o cliente do banco de dados.

set pages 999 lines 120
col SOFTWARE_VERSION for A15
col INSTANCE_NAME for A20
col DB_NAME for A20 trunc
select INSTANCE_NAME, DB_NAME, STATUS, SOFTWARE_VERSION as "version"
from  V$ASM_CLIENT;
t.menard
fonte
1
Isso pressupõe que o ASM esteja sendo usado! E os bancos de dados armazenados em um sistema de arquivos ou SAN?
Colin 't Hart
3

Se você tiver bancos de dados conectáveis ​​(recomendado) no Oracle 12, poderá fazer o seguinte:

SELECT PDB_ID, PDB_NAME, STATUS FROM DBA_PDBS ORDER BY PDB_ID;
Pedro
fonte
0

Para o banco de dados independente, para obter a lista de bancos de dados iniciados automaticamente após a reinicialização do host:

cat /etc/oratab | grep -i ":y" | grep -v "^#"

ou apenas para obter a lista de todos os bancos de dados:

cat /etc/oratab | grep -v "^#"

Para bancos de dados RAC, o seguinte método pode ser útil:

crsctl stat res -t | grep "\.db"

Além disso, como já foi mencionado, o banco de dados no MySQL não é o mesmo que o banco de dados no Oracle. No Oracle, é mais próximo do esquema - que é chamado de contêiner para objetos do usuário. Para obter a lista de esquemas, você pode usar a seguinte instrução SQL:

select username from dba_users order by 1;

ou para obter a lista de esquemas não relacionados ao sistema (disponível no Oracle RDBMS a partir da versão 12c):

select username from dba_users where ORACLE_MAINTAINED='N' order by 1;
Prokhozhii
fonte