8 votos

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

IANADBA, pero estoy escribiendo un script que entrará en acción mientras la base de datos del oráculo en espera no haya sido activada. Lo que estoy buscando son dos consultas (o conjuntos de consultas, si es necesario).

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

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

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

Actualización

Tomé la sugerencia de abajo (modificada, ligeramente, porque estoy tratando con el Oráculo 8i, y entiendo 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 los archivos, pero no está "viva". Todavía estoy buscando una manera de saber si no está montado como una base de datos de reserva.

11voto

Matt Simmons Puntos 16275

¡Ya lo tengo!

CONTROLFILE_TYPE de v$database es la clave

 SQL> select CONTROLFILE_TYPE from v$database; 

 CONTROL
 -------
 CURRENT

frente a

 SQL> select CONTROLFILE_TYPE from v$database; 

 CONTROL
 -------
 STANDBY

0 votos

+1; Sería interesante saber cuál sería este valor si se abriera el standby para acceso de sólo lectura.

4voto

DCookie Puntos 1908

Esto funciona para un standby físico, Oracle 10g (y superior)

SELECT open_mode FROM v$database;

Si el valor es:

  1. 'MOUNTED', su base de datos está montada.
  2. 'READ WRITE', entonces puedes asumir que ha sido activado.
  3. 'SÓLO LECTURA', entonces podría estar abierto para la consulta en modo sólo lectura, pero no activado.
  4. 'LEER SÓLO CON APLICAR' cuando se utiliza el dataguard activo.

En las primarias:

select database_role from v$database;

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

Sobre el esclavo:

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

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

HTH

3voto

Karl Puntos 893

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

  • Los que dicen que usen "v$instance", están absolutamente equivocados porque eso dirá si la "instancia" está montada o 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 sabes la diferencia entonces mejor lee, y también lee sobre Oracle RAC y Oracle Data Gurard .

  • Los que dices que usan select CONTROLFILE_TYPE from v$database; tampoco son correctas porque según Oracle esta columna indica la información del archivo de control y dice si la base de datos está en modo de espera o en modo activo, lo que es diferente a si la base de datos se ha montado o si la base de datos está activa.

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

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

Base de datos principal:

enter image description here

Base de datos de guardia de datos en espera:

enter image description here

1voto

OilyRag Puntos 273

Esto podría ser demasiado simplista para lo que usted busca, ya que no estoy muy familiarizado con las bases de datos en espera

pero mientras la instancia esté en funcionamiento deberías poder consultar la vista v$instance y obtener el estado de la base de datos, por ejemplo

SELECT INSTANCE_NAME, DATABASE_STATUS, INSTANCE_ROLE, ACTIVE_STATE FROM v$instance;

0 votos

Buena sugerencia, pero desgraciadamente no me dijo lo que esperaba :-/

0voto

Matt Puntos 918

¿Podría monitorizar las conexiones a la base de datos mediante netstat/lsof? Es de suponer que te darías cuenta de que los clientes empiezan a utilizarla.

También puede ver el registro del archivo para esos comandos.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X