DataGuard es una tecnología de Oracle que te permite replicar una base de datos y mantenerla actualizada de acuerdo a niveles seleccionados de desempeño y protección; puedes tener una o más bases de datos en espera que puedes abrir en modo de sólo lectura con el propósito de generación de reportes (espera física) o en modo de lectura y escritura si no cambias los datos replicados (espera lógica). DataGuard es una tecnología muy útil para recuperación de desastres y más, por lo cual es muy recomendable leer toda la documentación listada al final de este mensaje. En el siguiente ejemplo es descrito el escenario más simple: creación de una base de datos en espera física en un servidor diferente de la base de datos primaria, con los mismos directorios, en modo de desempeño máximo, copiando la base de datos primaria con comandos de sistema operativo (no ASM).
Este ejemplo está escrito de forma que puedas crear rápida y fácilmente una base de datos en espera, pero no te confundas por esto y omitas leer la documentación; mientras más estudies la tecnología DataGuard menos problemas tendrás probando diferentes escenarios y configuraciones y diagnosticando tu base de datos en espera.
La primera parte y la mas difícil de crear una base de datos en espera es configurar la base de datos primaria, por lo tanto empezaremos activando la opción FORCE_LOGGING en la base de datos primaria:
oracle@primarysrv:/opt/oracle/product/10.2.0/db_1/dbs$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Tue Jun 7 12:49:25 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining Scoring Engine options
SQL> select FORCE_LOGGING from v$database;
FOR
---
NO
SQL> ALTER DATABASE FORCE LOGGING;
Database altered.
SQL> select FORCE_LOGGING from v$database;
FOR
---
YES
A continuación obtendremos información de los archivos de redo log tal como cantidad de grupos, hilos, el directorio y tamaño de los miembros, y crearemos archivos de log para espera del mismo tamaño que los archivos de log, agregando un grupo extra por cada hilo para los archivos de log para espera:
SQL> select GROUP#, MEMBER from v$logfile order by GROUP#;
GROUP# MEMBER
---------- ----------------------------------------
1 /primarydb/logfile/redo01.rdo
1 /fra/primarydb/logfile/redo01.rdo
2 /primarydb/logfile/redo02.rdo
2 /fra/primarydb/logfile/redo02.rdo
3 /primarydb/logfile/redo03.rdo
3 /fra/primarydb/logfile/redo03.rdo
6 rows selected.
SQL> select GROUP#, THREAD#, BYTES from v$log order by GROUP#;
GROUP# THREAD# BYTES
---------- ---------- ----------
1 1 134217728
2 1 134217728
3 1 134217728
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 ('/primarydb/logfile/stdby01.rdo',
'/fra/primarydb/logfile/stdby01.rdo') SIZE 134217728;
Database altered.
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 ('/primarydb/logfile/stdby02.rdo',
'/fra/primarydb/logfile/stdby02.rdo') SIZE 134217728;
Database altered.
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 ('/primarydb/logfile/stdby03.rdo',
'/fra/primarydb/logfile/stdby03.rdo') SIZE 134217728;
Database altered.
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 7 ('/primarydb/logfile/stdby04.rdo',
'/fra/primarydb/logfile/stdby04.rdo') SIZE 134217728;
Database altered.
SQL> SELECT GROUP#, THREAD#, SEQUENCE#, ARCHIVED, STATUS FROM V$STANDBY_LOG;
GROUP# THREAD# SEQUENCE# ARC STATUS
---------- ---------- ---------- --- ----------
4 0 0 YES UNASSIGNED
5 0 0 YES UNASSIGNED
6 0 0 YES UNASSIGNED
7 0 0 YES UNASSIGNED
Después de crear los grupos de archivos de log para espera revisaremos si la base de datos está en modo de archivado, tiene archivo de contraseñas y el parámetro remote_login_passwordfile está configurado adecuadamente; si no crearemos un archivo de contraseñas y activaremos el modo de archivado:
SQL> show parameter REMOTE_LOGIN_PASSWORDFILE
NAME TYPE VALUE
------------------------------------ -------------------- --------------
remote_login_passwordfile string EXCLUSIVE
SQL> select * from V$PWFILE_USERS;
no rows selected
SQL> select NAME, LOG_MODE from v$database;
NAME LOG_MODE
--------- ------------
primarydb NOARCHIVELOG
SQL> SHUTDOWN IMMEDIATE;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining Scoring Engine options
oracle@primarysrv:~$ cd $ORACLE_HOME/dbs
oracle@primarysrv:/opt/oracle/product/10.2.0/db_1/dbs$ orapwd FILE=orapwprimarydb password="somepassword"
oracle@primarysrv:/opt/oracle/product/10.2.0/db_1/dbs$ sqlplus '/ as sysdba'
SQL*Plus: Release 10.2.0.1.0 - Production on Fri Jun 10 11:34:18 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining Scoring Engine options
SQL> STARTUP MOUNT;
ORACLE instance started.
Total System Global Area 268435456 bytes
Fixed Size 1218892 bytes
Variable Size 92276404 bytes
Database Buffers 171966464 bytes
Redo Buffers 2973696 bytes
Database mounted.
SQL> ALTER DATABASE ARCHIVELOG;
Database altered.
SQL> ALTER DATABASE OPEN;
Database altered.
SQL> select NAME, LOG_MODE from v$database;
NAME LOG_MODE
--------- ------------
primarydb ARCHIVELOG
SQL> alter user SYS identified by "mypassword";
User altered.
SQL> select * from V$PWFILE_USERS;
USERNAME SYSDB SYSOP
------------------------------ ----- -----
SYS TRUE TRUE
En el paso anterior creamos primero un archivo de contraseñas con una contraseña y después cambiamos la contraseña de SYS; para que funcionen los servicios de transporte de redo las bases de datos primaria y en espera tienen que tener la misma contraseña para SYS y un archivo de contraseñas, por lo tanto si no hay archivo de contraseñas en la base de datos primaria puedes primero crearlo y luego cambiar la contraseña de SYS, crear el archivo de contraseñas con la contraseña apropiada o sólo cambiar la contraseña de SYS si ya existe. Pero dado que no puedes abrir una base de datos en espera física en modo de lectura y escritura sin descomponerla para propósitos de DataGuard, no puedes cambiar la contraseña de SYS con una sentencia ALTER USER por lo que tienes que crear el archivo de contraseñas de la base de datos en espera con la contraseña apropiada.
A continuación configuraremos los parámetros necesarios para una configuración de DataGuard, hay que revisar los 19 parámetros listados a continuación y cambiarlos como sea necesario, además de que podría tenerse que revisar otros parámetros no listados que estén relacionados a direcciones de servidor o directorios de sistemas de archivos.
SQL> column NAME format a30
SQL> column VALUE format a40
SQL> select NAME, VALUE from v$parameter where NAME in ('db_name','db_unique_name',
'log_archive_config','control_files','log_archive_dest','log_archive_dest_1',
'log_archive_dest_2','log_archive_dest_state_1','log_archive_dest_state_2',
'remote_login_passwordfile','log_archive_format','log_archive_max_processes','fal_server',
'fal_client','db_file_name_convert','log_file_name_convert','standby_file_management',
'db_recovery_file_dest','db_recovery_file_dest_size') order by NAME;
NAME VALUE
------------------------------ ----------------------------------------
control_files /primarydb/controlfile/primarydb01.ctl
, /fra/primarydb/controlfile/primarydb02.c
tl
db_file_name_convert
db_name primarydb
db_recovery_file_dest
db_recovery_file_dest_size 0
db_unique_name primarydb
fal_client
fal_server
log_archive_config
log_archive_dest /fra/archfile/
log_archive_dest_1
log_archive_dest_2
log_archive_dest_state_1 enable
log_archive_dest_state_2 enable
log_archive_format primarydb_%t_%s_%r.arc
log_archive_max_processes 2
log_file_name_convert
remote_login_passwordfile EXCLUSIVE
standby_file_management MANUAL
19 rows selected.
SQL> alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(primarydb,standbydb)';
System altered.
SQL> alter system set log_archive_dest='';
System altered.
SQL> alter system set LOG_ARCHIVE_DEST_1='LOCATION=/fra/primarydb/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=primarydb';
System altered.
SQL> alter system set LOG_ARCHIVE_DEST_2='SERVICE=standbydb LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standbydb';
System altered.
SQL> alter system set FAL_SERVER=standbydb;
System altered.
SQL> alter system set FAL_CLIENT=primarydb;
System altered.
SQL> alter system set standby_file_management=AUTO;
System altered.
SQL> select NAME, VALUE from v$parameter where NAME in ('db_name','db_unique_name',
'log_archive_config','control_files','log_archive_dest','log_archive_dest_1',
'log_archive_dest_2','log_archive_dest_state_1','log_archive_dest_state_2',
'remote_login_passwordfile','log_archive_format','log_archive_max_processes','fal_server',
'fal_client','db_file_name_convert','log_file_name_convert','standby_file_management',
'db_recovery_file_dest','db_recovery_file_dest_size') order by NAME;
NAME VALUE
------------------------------ ----------------------------------------
control_files /primarydb/controlfile/primarydb01.ctl
, /fra/primarydb/controlfile/primarydb02.c
tl
db_file_name_convert
db_name primarydb
db_recovery_file_dest
db_recovery_file_dest_size 0
db_unique_name primarydb
fal_client primarydb
fal_server standbydb
log_archive_config DG_CONFIG=(primarydb,standbydb)
log_archive_dest
log_archive_dest_1 LOCATION=/fra/primarydb/archivel
og VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB
_UNIQUE_NAME=primarydb
log_archive_dest_2 SERVICE=standbydb LGWR ASYNC VALID_FOR=(O
NLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_N
AME=standbydb
log_archive_dest_state_1 enable
log_archive_dest_state_2 enable
log_archive_format primarydb_%t_%s_%r.arc
log_archive_max_processes 2
log_file_name_convert
remote_login_passwordfile EXCLUSIVE
standby_file_management AUTO
19 rows selected.
Tienes que configurar valores como los arriba listados para tus parámetros de base de datos DataGuard. Después de haber hecho esto, estás casi listo para copiar tu base de datos al servidor en espera junto con el archivo pfile y uno especial de control de la base de datos:
SQL> SHUTDOWN IMMEDIATE;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining Scoring Engine options
oracle@primarysrv:~$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Wed Jun 8 12:18:44 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to an idle instance.
SQL> STARTUP MOUNT;
ORACLE instance started.
Total System Global Area 268435456 bytes
Fixed Size 1218892 bytes
Variable Size 92276404 bytes
Database Buffers 171966464 bytes
Redo Buffers 2973696 bytes
Database mounted.
SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/primarydb/standbydb.ctl';
Database altered.
SQL> CREATE PFILE='/primarydb/initstandbydb.ora' FROM SPFILE;
File created.
SQL> SHUTDOWN IMMEDIATE;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining Scoring Engine options
En este punto puedes copiar todos los archivos relevantes de la base de datos (datafiles, tempfiles, online redo logs, standby redo logs, standby control file y pfile) con tu método y programas favoritos, como scp. No olvides colocar todos los archivos en el mismo directorio (respecto al origen), este ejemplo asume eso. Si colocas los archivos de la base de datos en un directorio diferente, tienes que configurar parámetros como db_file_name_convert y log_file_name_convert (no cubiertos en este mensaje). Además, tienes que crear directorios necesarios para parámetros como background_dump_dest, core_dump_dest, user_dump_dest y audit_file_dest entre otros.
Después de eso, tienes que copiar tu archivo de control de espera a todos los directorios especificados en el parámetro control_files, usando los mismos nombres de archivo; no puedes usar el archivo de control original (primario) o saldrá un error.
Finalmente, tienes que modificar algunos parámetros en el pfile de espera de la nueva base de datos; podría ser útil tener el pfile primario original y el pfile de espera y compararlos como en el siguiente ejemplo, sólo para estar seguro que modificaste todo apropiadamente. En este pfile de espera no hay parámetros primarydb.__ ya que están relacionados a parámetros manejados automáticamente por la instancia de Oracle pero salvados de todas formas con la sentencia CREATE PFILE, y el parámetro audit_trail debe ser puesto como OS, de otra forma necesitas abrir la base de datos en modo de lectura y escritura para guardar todos los eventos de auditoría en la misma base de datos (valor DB), pero no puedes hacer eso con una base de datos en espera física. Además, hay un parámetro extra db_unique_name con el nombre de la base de datos en espera, que por default es opcional e igual a db_name (en este caso primarydb) pero obligatorio en una base de datos en espera.
oracle@standbysrv:/primarydb$ diff initstandbydb.ora initprimarydb.ora
0a1,5
> primarydb.__db_cache_size=171966464
> primarydb.__java_pool_size=4194304
> primarydb.__large_pool_size=4194304
> primarydb.__shared_pool_size=83886080
> primarydb.__streams_pool_size=0
3,4c8,9
< *.audit_trail='os'
---
> *.audit_trail='db'
14,16c19,20
< *.db_unique_name='standbydb'
< *.fal_client='standbydb'
< *.fal_server='primarydb'
---
> *.fal_client='primarydb'
> *.fal_server='standbydb'
22,23c26,27
< *.log_archive_dest_1='LOCATION=/fra/primarydb/standbydb/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=standbydb'
< *.log_archive_dest_2='SERVICE=primarydb LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=primarydb'
---
> *.log_archive_dest_1='LOCATION=/fra/primarydb/primarydb/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=primarydb'
> *.log_archive_dest_2='SERVICE=standbydb LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standbydb'
Pero antes de levantar tus bases de datos primaria y en espera, primero tienes que incluir en los archivos tnsnames.ora la información de conexión de las instancias primaria y en espera, en los servidores primario y en espera:
PRIMARYDB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = primarysrv)(PORT = 1521))
)
(CONNECT_DATA = (SERVICE_NAME = primarydb))
)
STANDBYDB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = standbysrv)(PORT = 1521))
)
(CONNECT_DATA = (SERVICE_NAME = standbydb))
)
Además tienes que tener los listeners configurados para las instancias primaria y en espera (cambia los archivos listener.ora como sea necesario):
LISTENER_PRIMARYDB =(ADDRESS_LIST = (ADDRESS= (PROTOCOL=TCP) (HOST = primarysrv) (PORT = 1521)))
SID_LIST_LISTENER_PRIMARYDB =
(SID_LIST =
(SID_DESC =
(SID_NAME = primarydb)
(ORACLE_HOME = /opt/oracle/product/10.2.0/db_1)
(ORACLE_SID = primarydb)
)
)
CONNECT_TIMEOUT_LISTENER_PRIMARYDB=30
Levanta los listeners de las bases de datos primaria y en espera y revisalos con el comando tnsping, en los servidores primario y en espera:
oracle@standbysrv:/primarydb$ tnsping primarydb
TNS Ping Utility for Linux: Version 10.2.0.1.0 - Production on 17-JUN-2011 12:23:42
Copyright (c) 1997, 2005, Oracle. All rights reserved.
Used parameter files:
/opt/oracle/product/10.2.0/db_1/network/admin/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = primarysrv)(PORT = 1521))
(CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = primarydb)))
OK (10 msec)
oracle@standbysrv:/primarydb$ tnsping standbydb
TNS Ping Utility for Linux: Version 10.2.0.1.0 - Production on 17-JUN-2011 12:23:42
Copyright (c) 1997, 2005, Oracle. All rights reserved.
Used parameter files:
/opt/oracle/product/10.2.0/db_1/network/admin/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = standbysrv)(PORT = 1521))
(CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = standbydb)))
OK (0 msec)
En este punto podrás crear un archivo de contraseñas y levantar tu base de datos en espera:
oracle@standbysrv:/primarydb$ export ORACLE_SID=standbydb
oracle@standbysrv:/primarydb$ set|grep ORA
ORACLE_BASE=/opt/oracle
ORACLE_HOME=/opt/oracle/product/10.2.0/db_1
ORACLE_SID=standbydb
oracle@standbysrv:/primarydb$ cd $ORACLE_HOME/dbs
oracle@standbysrv:/opt/oracle/product/10.2.0/db_1/dbs$ orapwd FILE=orapwstandbydb password="mypassword"
oracle@standbysrv:/opt/oracle/product/10.2.0/db_1/dbs$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Wed Jun 8 17:15:59 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to an idle instance.
SQL> create spfile from pfile='/primarydb/initstandbydb.ora';
File created.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 268435456 bytes
Fixed Size 1218892 bytes
Variable Size 88082100 bytes
Database Buffers 176160768 bytes
Redo Buffers 2973696 bytes
Database mounted.
Si todo fue hecho apropiadamente, en el siguiente paso la base de datos en espera contactará la base de datos primaria e iniciará la sincronización de datos, pero primero tienes que levantar tu base de datos primaria como lo haces usualmente (abrirla en modo de lectura y escritura). Entonces, inicias la sincronización de datos en la base de datos en espera:
SQL> alter database recover managed standby database disconnect from session;
Database altered.
SQL> select name, open_mode, database_role from v$database;
NAME OPEN_MODE DATABASE_ROLE
--------- ---------- ----------------
PRIMARYDB MOUNTED PHYSICAL STANDBY
Y además forzas un cambio de log en la base de datos primaria para iniciar la transferencia:
SQL> ALTER SYSTEM SWITCH LOGFILE;
System altered.
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
SEQUENCE# FIRST_TIME NEXT_TIME
---------- ----------- -----------
6 07-jun-2011 08-jun-2011
7 08-jun-2011 08-jun-2011
8 08-jun-2011 10-jun-2011
9 10-jun-2011 10-jun-2011
Después de esperar un poco debes ver la misma información en la base de datos en espera:
SQL> select sequence#, first_time, next_time from v$archived_log order by sequence#;
SEQUENCE# FIRST_TIME NEXT_TIME
---------- ------------------ ------------------
6 07-JUN-11 08-JUN-11
7 08-JUN-11 08-JUN-11
8 08-JUN-11 10-JUN-11
9 10-JUN-11 10-JUN-11
4 rows selected.
Si puedes verla, felicitaciones! Todo salió bien y ahora tienes una base de datos en espera física funcionando. Como un buen extra, puedes configurar el borrado automático de redo logs aplicados cuando tu sistema de archivos de logs archivados esté casi lleno, y además revisar tu base de datos en espera abriéndola en modo de sólo lectura.
Activemos el borrado automático de redo logs aplicados configurando los siguientes parámetros en la base de datos en espera:
SQL> alter system set DB_RECOVERY_FILE_DEST_SIZE=2G;
System altered.
SQL> alter system set DB_RECOVERY_FILE_DEST='/fra/primarydb';
System altered.
SQL> alter system set LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST';
System altered.
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
Configura DB_RECOVERY_FILE_DEST_SIZE un poco abajo del límite del sistema de archivos de DB_RECOVERY_FILE_DEST; recuerda que cualquier archivo no colocado automáticamente por y relacionado con Oracle no cuenta para el límite puesto en el parámetro DB_RECOVERY_FILE_DEST_SIZE. Y para terminar este paso, tienes que usar la sentencia CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY en RMAN en los servidores primario y en espera:
oracle@primarysrv:/opt/oracle/product/10.2.0/db_1/dbs$ rman
Recovery Manager: Release 10.2.0.1.0 - Production on Fri Jun 10 12:57:46 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
RMAN> connect target /
connected to target database: primarydb (DBID=3023816100)
RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;
using target database control file instead of recovery catalog
new RMAN configuration parameters:
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;
new RMAN configuration parameters are successfully stored
RMAN> show all;
RMAN configuration parameters are:
...
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;
...
RMAN> exit
Recovery Manager complete.
========================================
oracle@standbysrv:/opt/oracle/product/10.2.0/db_1/dbs$ rman
Recovery Manager: Release 10.2.0.1.0 - Production on Fri Jun 10 12:54:49 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
RMAN> connect target /
connected to target database: primarydb (DBID=3023816100, not open)
RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;
using target database control file instead of recovery catalog
new RMAN configuration parameters:
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;
new RMAN configuration parameters are successfully stored
RMAN> SHOW ALL;
RMAN configuration parameters are:
...
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;
...
RMAN> exit
Recovery Manager complete.
Casi hemos terminado! Ahora revisaremos que la base de datos en espera pueda ser abierta en modo de sólo lectura (por ejempo para generación de reportes) abriéndola y haciendo una simple consulta:
oracle@standbysrv:/opt/oracle/product/10.2.0/db_1/dbs$ sqlplus '/ as sysdba'
SQL*Plus: Release 10.2.0.1.0 - Production on Fri Jun 10 13:16:24 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> alter database recover managed standby database cancel;
Database altered.
SQL> alter database open;
Database altered.
SQL> select count(*) from dba_objects;
COUNT(*)
----------
9715
SQL> select name, open_mode from v$database;
NAME OPEN_MODE
--------------------------- ------------------------------
primarydb READ ONLY
En este momento puedes consultar tablas relacionadas con tus propios esquemas si es que las conoces.
Finalmente, puedes reiniciar la sincronización en la base de datos en espera:
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
oracle@standbysrv:/opt/oracle/product/10.2.0/db_1/dbs$ sqlplus '/ as sysdba'
SQL*Plus: Release 10.2.0.1.0 - Production on Fri Jun 10 13:20:46 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 268435456 bytes
Fixed Size 1218892 bytes
Variable Size 88082100 bytes
Database Buffers 176160768 bytes
Redo Buffers 2973696 bytes
Database mounted.
SQL> alter database recover managed standby database disconnect from session;
Database altered.
SQL> select sequence#, first_time, next_time from v$archived_log order by sequence#;
SEQUENCE# FIRST_TIME NEXT_TIME
---------- ------------------ ------------------
6 07-JUN-11 08-JUN-11
7 08-JUN-11 08-JUN-11
8 08-JUN-11 10-JUN-11
9 10-JUN-11 10-JUN-11
10 10-JUN-11 10-JUN-11
11 10-JUN-11 10-JUN-11
12 10-JUN-11 10-JUN-11
7 rows selected.
No olvides forzar un cambio de logs en la base de datos primaria para revisar la trasferencia de redo logs.
Y eso es todo! Hemos terminado la creación y revisión de una base de datos Oracle en espera física; no olvides leer la siguiente documentación (o alguna similar para 11g):
Oracle Data Guard Concepts and Administration 10g Release 2 (10.2)Creating and Maintaining a Password FileMaintenance Of Archivelogs On Standby Databases