¿Cómo puedo saber si una base de datos Oracle está montada y activada?

¿Cómo puedo saber si una base de datos Oracle está montada y activada?

IANADBA, pero estoy escribiendo un script que actuará siempre que la base de datos en espera de Oracle no se haya activado. Lo que busco son dos consultas (o conjuntos de consultas, si es necesario).

1 - ¿Está montada la base de datos (como en, alguien ha hecho "alterar la base de datos para montar la base de datos en espera")

2 - ¿Cómo puedo saber si la base de datos está activada (como en "alterar la base de datos, activar la base de datos en espera")?

Como mencioné, estoy buscando consultas, pero si hay una manera de saberlo en el sistema, también estoy abierto a eso. ¡Gracias!

Actualizar

Tomé la sugerencia a continuación (modificada ligeramente porque estoy tratando con Oracle 8i y obtengo esto:

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

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

En este momento, esta instancia está recuperando activamente los registros de archivo, pero no está "activa". Todavía estoy buscando una manera de saber si no está montada como una base de datos en espera.

Respuesta1

¡Lo tengo!

CONTROLFILE_TYPE de v$database es la clave

 SQL> select CONTROLFILE_TYPE from v$database; 

 CONTROL
 -------
 CURRENT

versus

 SQL> select CONTROLFILE_TYPE from v$database; 

 CONTROL
 -------
 STANDBY

Respuesta2

Esto funciona para un modo de espera físico, Oracle 10g (y superior)

SELECCIONE open_mode DESDE v$database;

Si el valor es:

  1. 'MONTADO', su base de datos está montada.
  2. 'LEER ESCRIBIR', entonces puedes asumir que se ha activado.
  3. 'SOLO LECTURA' entonces podría abrirse para consultas en modo de solo lectura, pero no activarse.
  4. 'LEER SÓLO CON APLICAR' cuando se utiliza dataguard activo.

En primaria:

select database_role from v$database;

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

En esclavo:

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

Puede que también haya otros valores, no estoy seguro.

HT

Respuesta3

Realmente no sé la respuesta a esta pregunta: "¿Cómo puedo saber si una base de datos Oracle está montada y activada?", peroTengo que publicar una respuesta para que la gente sepa que no se dejen engañar por las respuestas de esta publicación porque la mayoría están muy equivocadas..

  • Aquellos que dicen que usan "v$instance" están absolutamente equivocados porque eso dirá si la "instancia" está montada, iniciando o activa o no.Tenga en cuenta que la base de datos y la instancia de la base de datos son cosas diferentes., así que si no conoces la diferencia, mejor lee, y también lee sobreOracle RAC y Oracle Data Guardard.

  • Los que dices que usan select CONTROLFILE_TYPE from v$database;tampoco son correctos porque segúnOráculoesta columna proporciona información sobre el archivo de control e indica si la base de datos está en modo de espera o en modo activo, lo cual es diferente a si la base de datos se ha montado o si está activa.

Como dije, creo que es muy importante comprender la diferencia entre base de datos e instancia de base de datos y también saber qué es Oracle RAC y Oracle Data Gurard.

Supongamos que tengo una base de datos primaria y otra base de datos databguard en espera, y ambas bases de datos/instancia están activas para su uso, pero veo la diferencia con las siguientes capturas de pantalla:

Base de datos primaria:

ingrese la descripción de la imagen aquí

Base de datos de protección de datos en espera:

ingrese la descripción de la imagen aquí

Respuesta4

¿Podrías monitorear las conexiones a la base de datos a través de netstat/lsof? Presumiblemente notarás que los clientes comienzan a usarlo.

También es posible que pueda ver el registro de archivo de esos comandos.

información relacionada