Como posso saber se um banco de dados Oracle está montado e ativado?

Como posso saber se um banco de dados Oracle está montado e ativado?

IANADBA, mas estou escrevendo um script que entrará em ação enquanto o banco de dados Oracle Standby não tiver sido ativado. O que procuro são duas consultas (ou conjuntos de consultas, se necessário).

1 - O banco de dados está montado (como alguém fez "alterar banco de dados de montagem em espera")

2 - Como posso saber se o banco de dados está ativado (como em "alter database activate standby database")?

Como mencionei, estou procurando dúvidas, mas se houver uma maneira de saber no sistema, também estou aberto a isso. Obrigado!

Atualizar

Aceitei a sugestão abaixo (modificada, um pouco, pois estou lidando com Oracle 8i, e recebo isto:

 SQL>  SELECT INSTANCE_NAME, DATABASE_STATUS, INSTANCE_ROLE from v$instance; 

 INSTANCE_NAME    DATABASE_STATUS   INSTANCE_ROLE
 ---------------- ----------------- ------------------
 RGR01            ACTIVE            PRIMARY_INSTANCE

No momento, esta instância está recuperando ativamente logs de arquivo, mas não está "ativa". Ainda estou procurando uma maneira de saber se ele não está montado como um banco de dados standby.

Responder1

Eu entendi!

CONTROLFILE_TYPE de v$database é a chave

 SQL> select CONTROLFILE_TYPE from v$database; 

 CONTROL
 -------
 CURRENT

contra

 SQL> select CONTROLFILE_TYPE from v$database; 

 CONTROL
 -------
 STANDBY

Responder2

Isso funciona para um standby físico, Oracle 10g (e superior)

SELECIONE open_mode FROM v$database;

Se o valor for:

  1. 'MOUNTED', seu banco de dados está montado.
  2. 'READ WRITE', então você pode assumir que foi ativado.
  3. 'READ ONLY' então ele pode ser aberto para consulta no modo somente leitura, mas não ativado.
  4. 'LER SOMENTE COM APLICAR' ao usar o dataguard ativo.

No primário:

select database_role from v$database;

DATABASE_ROLE
----------------
PRIMARY

No escravo:

OPEN_MODE
--------------------    --------------------
MOUNTED              or READ ONLY WITH APPLY

Pode haver outros valores também, não tenho certeza.

HTH

Responder3

Eu realmente não sei a resposta para esta pergunta - "Como posso saber se um banco de dados Oracle está montado e ativado?", masEu tenho que postar uma resposta para que as pessoas saibam que, por favor, não se deixem enganar pelas respostas desta postagem porque a maioria está grosseiramente enganada.

  • Aqueles que dizem que usam "v$instance" estão absolutamente errados porque isso dirá se a "instância" está montada, iniciando, ativa ou não.Observe que banco de dados e instância de banco de dados são coisas diferentes, então se você não sabe a diferença, então é melhor ler e também ler sobreOracle RAC e Oracle Data Guard.

  • Aqueles que você está dizendo usar select CONTROLFILE_TYPE from v$database;também não estão certos porque, de acordo comOráculoesta coluna informa sobre as informações do arquivo de controle e informa se o banco de dados está em modo de espera ou em modo ativo, que é diferente de se o banco de dados foi montado ou se o banco de dados está ativo.

Como eu disse, acho muito importante entender a diferença entre banco de dados e instância de banco de dados e também saber o que é Oracle RAC e Oracle Data Gurard.

Suponha que eu tenha um banco de dados primário e outro banco de dados standby databguard, e ambos os bancos de dados/instâncias estejam ativos para uso, mas veja a diferença nas capturas de tela abaixo:

Banco de dados primário:

insira a descrição da imagem aqui

Banco de dados de proteção de dados em espera:

insira a descrição da imagem aqui

Responder4

Você poderia monitorar as conexões com o banco de dados via netstat/lsof? Presumivelmente, você notará que os clientes estão começando a usá-lo.

Você também pode observar o log de arquivo desses comandos.

informação relacionada