Eu entendi!
CONTROLFILE_TYPE do v $ database é a chave
SQL> select CONTROLFILE_TYPE from v$database;
CONTROL
-------
CURRENT
versus
SQL> select CONTROLFILE_TYPE from v$database;
CONTROL
-------
STANDBY
IANADBA, mas estou escrevendo um script que entrará em ação enquanto o banco de dados Oracle Standby não estiver ativado. O que estou procurando é duas consultas (ou conjuntos de consultas, se necessário).
1 - O banco de dados está montado (como em alguém que fez "alter database mount standby database")
2 - Como posso saber se o banco de dados está ativado (como em "alter database activate standby database")?
Como mencionei, estou procurando por consultas, mas se houver uma maneira de contar no sistema, também estou aberto a isso. Obrigado!
Atualizar
Eu peguei a sugestão abaixo (modificada, levemente, porque estou lidando com o Oracle 8i, e eu entendo isso:
SQL> SELECT INSTANCE_NAME, DATABASE_STATUS, INSTANCE_ROLE from v$instance;
INSTANCE_NAME DATABASE_STATUS INSTANCE_ROLE
---------------- ----------------- ------------------
RGR01 ACTIVE PRIMARY_INSTANCE
Neste momento, esta instância está recuperando ativamente logs de arquivamento, mas não está "ativa". Ainda estou procurando uma maneira de saber se ele não está montado como um banco de dados em espera.
Isso funciona para uma espera física, Oracle 10g (e superior)
SELECT open_mode FROM v $ database;
Se o valor for:
No primário:
select database_role from v$database;
DATABASE_ROLE
----------------
PRIMARY
No escravo:
OPEN_MODE
-------------------- --------------------
MOUNTED or READ ONLY WITH APPLY
Também pode haver outros valores, não tenho certeza.
HTH
Isso pode ser excessivamente simplista para o que você procura, já que eu não estou muito familiarizado com os bancos de dados de espera
mas, enquanto a instância estiver ativa, você poderá consultar a visualização v $ instance e obter o status do banco de dados, por exemplo
SELECT INSTANCE_NAME, DATABASE_STATUS, INSTANCE_ROLE, ACTIVE_STATE FROM v$instance;
Você poderia monitorar as conexões com o banco de dados via netstat / lsof? Provavelmente você notaria clientes começando a usá-lo.
Você também pode ver o log de arquivamento desses comandos.
Eu realmente não sei a resposta para esta pergunta - "Como posso saber se um banco de dados Oracle é montado e ativado?", mas eu tenho que postar a resposta para que as pessoas saibam que por favor não se engane as respostas deste post porque a maioria está muito enganada .
Aqueles que estão dizendo que usam "v $ instance", estão absolutamente errados porque isso dirá se "instance" está montado ou começando ou ativo ou não. Observe que banco de dados e instância do banco de dados são coisas diferentes , portanto, se você não sabe a diferença, leia melhor e leia também sobre o Oracle RAC e o Oracle Data Gurard .
Aqueles que você está dizendo usar select CONTROLFILE_TYPE from v$database;
também não estão certos porque, de acordo com Oracle esta coluna informa sobre as informações do arquivo de controle e informa se o banco de dados está no modo de espera ou no modo ativo, o que é diferente 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 o banco de dados e a instância do banco de dados e também saber o que é o Oracle RAC e o Oracle Data Gurard.
Suponha que eu tenha um banco de dados primário e outro banco de dados de databguard em standby, e os dois bancos de dados / instâncias estejam ativos para uso, mas veja a diferença das capturas de tela abaixo:
Banco de dados principal:
Bancodedadosdeproteçãodedadosemespera: