miércoles, 18 de enero de 2012

Revisando instancias de Data Guard

Si tienes bases de datos Oracle configuradas con Data Guard, podrías querer estar seguro de que todo está bien y los archivos son transmitidos a y cargados en tu base de datos en espera. Puedes hacer esto fácilmente ejecutando este script en tu instancia primaria:

COLUMN ARCHIVE_NAME FORMAT A35
COLUMN TRANSMITTED FORMAT A18
COLUMN STDBY_APPLIED FORMAT A10
COLUMN PRI_ARCH, FORMAT A10
COLUMN STDBY_DEST FORMAT A10

select case when remote.sequence# is null
then 'NOT TRANSMITTED!'
else 'transmitted'
end as TRANSMITTED,
remote.applied as STDBY_APPLIED,
local.sequence# PRI_SEQ#,
local.archived PRI_ARCH,
remote.standby_dest STDBY_DEST,
remote.sequence# STDBY_SEQ#,
current_seq#, status_db
from (
(select *
from (
select v$instance.status as status_db,instance_role,
sequence# current_seq#, (sequence#-11) secuencia
from v$log, v$instance
where v$log.status = 'CURRENT'
), v$archived_log l
where dest_id = 1
and l.sequence# > secuencia) local
left join
(select * from v$archived_log where dest_id = 2) remote
on local.sequence# = remote.sequence# and
local.thread# = remote.thread#
)
order by local.sequence# desc;

El significado de los campos es:

TRANSMITTED si el log archivado fue transferido a la instancia en espera
STDBY_APPLIED si el log archivado fue aplicado a la base de datos en espera
PRI_SEQ# numero de secuencia del log de la base de datos primaria
PRI_ARCH si el log fue archivado
STDBY_SEQ# numero de secuencia del log de la base de datos en espera
CURRENT_SEQ# numero de secuencia actual
STATUS_DB estado de la instancia primaria

Como puedes ver en este ejemplo, la base de datos en espera está actualizada y todo está bien:

TRANSMITTED STDBY_APPL PRI_SEQ# PRI STDBY_DEST STDBY_SEQ# CURRENT_SEQ# STATUS_DB
------------------ ---------- ---------- --- ---------- ---------- ------------ ------------
transmitted YES 788 YES YES 788 789 OPEN
transmitted YES 787 YES YES 787 789 OPEN
transmitted YES 786 YES YES 786 789 OPEN
transmitted YES 785 YES YES 785 789 OPEN
transmitted YES 784 YES YES 784 789 OPEN
transmitted YES 783 YES YES 783 789 OPEN
transmitted YES 782 YES YES 782 789 OPEN
transmitted YES 781 YES YES 781 789 OPEN
transmitted YES 780 YES YES 780 789 OPEN
transmitted YES 779 YES YES 779 789 OPEN

10 rows selected.

En este ejemplo, todos los logs archivados han sido transferidos a la base de datos en espera pero no han sido aplicados, en este caso debido a que la base de datos en espera está abierta en modo de sólo lectura:

TRANSMITTED STDBY_APPL PRI_SEQ# PRI STDBY_DEST STDBY_SEQ# CURRENT_SEQ# STATUS_DB
------------------ ---------- ---------- --- ---------- ---------- ------------ ------------
transmitted NO 387 YES YES 387 388 OPEN
transmitted NO 386 YES YES 386 388 OPEN
transmitted NO 385 YES YES 385 388 OPEN
transmitted NO 384 YES YES 384 388 OPEN
transmitted NO 383 YES YES 383 388 OPEN
transmitted NO 382 YES YES 382 388 OPEN
transmitted NO 381 YES YES 381 388 OPEN
transmitted NO 380 YES YES 380 388 OPEN
transmitted NO 379 YES YES 379 388 OPEN
transmitted NO 378 YES YES 378 388 OPEN

10 rows selected.

Este script funciona siempre y cuando el parámetro LOG_ARCHIVE_DEST_2 apunte a la base de datos en espera.

Y sólo para el registro no todo en este blog es mi idea, por ejemplo este script fue idea de un compañero administrador de bases de datos. Algunas veces obtengo ideas de internet, algunas veces de mis compañeros de trabajo, y aunque no lo creas, algunas veces tengo mis propias ideas!

No hay comentarios.:

Publicar un comentario