Creación de dataguard mediante comandos sql:
Pre-requisitos de la base primaria:
1) alter
database force logging;
2) deben
estar seteados los parámetros
(transport authentication)
log_archive_dest_N = ubicación
de los logs
3) Configurar
primary database para recibir redo (Section 6.2.3)
fal_server= va la entrada de la que se va a definir como primaria
Aqui tenemos en modo de ejemplo un archivo de parametros para la base de datos primaria
Donde Chicago es primaria
y Boston secundaria:
LOG_ARCHIVE_CONFIG='DG_CONFIG=(chicago ,boston )'
CONTROL_FILES='/arch1/chicago/control1.ctl',
'/arch2/chicago/control2.ctl'
LOG_ARCHIVE_DEST_1='LOCATION=/arch1/chicago/
VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=chicago '
LOG_ARCHIVE_DEST_2='SERVICE=boston
ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=boston '
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
LOG_ARCHIVE_MAX_PROCESSES=30
4) ALTER DATABASE CREATE STANDBY CONTROLFILE
AS '/tmp/boston.ctl';
5) creamos el pfile para la base de datos standby
CREATE PFILE='/tmp/initboston.ora' FROM
SPFILE;
Lo pasamos al otro servidor si es que la generamos en otro server
6) Preparar
el pfile para la standby ,modificando los parametros para indicar que va ser la standby
DB_NAME=chicago
DB_UNIQUE_NAME=boston
LOG_ARCHIVE_CONFIG='DG_CONFIG=(chicago ,boston )'
CONTROL_FILES='/arch1/boston/control1.ctl', '/arch2/boston/control2.ctl'
DB_FILE_NAME_CONVERT='chicago ','boston '
LOG_FILE_NAME_CONVERT=
'/arch1/chicago/','/arch1/boston/','/arch2/chicago/','/arch2/boston/'
LOG_ARCHIVE_FORMAT=log%t_%s_%r.arc
LOG_ARCHIVE_DEST_1=
'LOCATION=/arch1/boston/
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
LOG_ARCHIVE_DEST_2=
'SERVICE=chicago ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=chicago '
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
STANDBY_FILE_MANAGEMENT=AUTO
FAL_SERVER=chicago
7)Copiar el password file de la primaria a la standby
8)Se deben configurar en
ambos Server el tnsmanes y el listener para que se pueda efectuar el cambio de rol (de primaria a standby)
9)Montarla base standby y comenzar el recover
Aplicara
los redo en real time:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
USING CURRENT LOGFILE DISCONNECT FROM SESSION;
en caso de querer correrlo en foreground , ejecutar lo siguente:
ALTER DATABASE RECOVER MANAGED STANDBY
DATABASE;
Notas:
para cancelar el aplicado de redo ejecutar el siguente comendo en el sqlplus
ALTER DATABASE RECOVER MANAGED STANDBY
DATABASE CANCEL;
10)Ejecutar en la primary
ALTER
DATABASE SET STANDBY DATABASE TO MAXIMIZE {AVAILABILITY | PERFORMANCE |
PROTECTION};
11)verificar que la base primaria
esta trabajando con el metodo
de proteccion indicado
SELECT PROTECTION_MODE FROM V$DATABASE;
Proceso
de switch
Realizar
el switch over hacia la standby fisica.
1)
Verificar cual es primaria y cual standby:
SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
-----------------
TO
STANDBY
El
valor TO STANDBY o SESSIONS ACTIVE indica que la base de datos primaria
puede cambiar a role standby.
2) Ejecutar
sobre la primaria
ALTER DATABASE COMMIT TO SWITCHOVER TO
PHYSICAL STANDBY WITH SESSION SHUTDOWN;
SQL> SHUTDOWN ABORT;
SQL> STARTUP MOUNT;
3) Ejecutar
sobre la base standby para ver si puede
pasar a role primario
SELECT SWITCHOVER_STATUS FROM V$DATABASE;
Si
nos retorna TO PRIMARY o SESSIONS ACTIVE la base standby puede ser switcheada
como role primaria
4) Ejecutar en la standby
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY
WITH SESSION SHUTDOWN;
ALTER
DATABASE OPEN;
5) Ejecutar en la
ex primaria (futura standby)
Comenzar
el aplicado de redo hacia la nueva standby
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
USING CURRENT LOGFILE DISCONNECT FROM SESSION;
Or
ALTER DATABASE RECOVER MANAGED STANDBY
DATABASE DISCONNECT;
Failover
1)se
Ejecuta sobre la base de datos primaria en el caso de poderse montar.
#
realiza un flush de los redo no enviados desde la primaria hasta
la standby
ALTER SYSTEM FLUSH REDO TO 'SRDDBA';
2)
Parar el REDO APPY en la base de datos standby
ALTER DATABASE RECOVER MANAGED STANDBY
DATABASE CANCEL;
3)
Finalizar la aplicación de todos los redo recibidos (ejecutar en la standby)
ALTER DATABASE RECOVER MANAGED STANDBY
DATABASE FINISH;
4)
Verificar que la standby puede pasar a
role primario
SELECT SWITCHOVER_STATUS FROM V$DATABASE;
Si
nos retorna TO PRIMARY o SESSIONS ACTIVE la base standby puede ser switcheada
como role primaria.
5)
realizar switch de role fisica standby a primaria (ejecutar en standby)
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY
[WITH SESSION SHUTDOWN];
6)
Abrir base de datos (ejecutar sobre la standby)
ALTER
DATABASE OPEN;
7)
Realizar un backup full de la nueva base de datos primaria.
8)
Convertir la vieja primaria en standby fisica, usando flashback
a)Ejecutar sobre la nueva primaria
SELECT
TO_CHAR(STANDBY_BECAME_PRIMARY_SCN) FROM V$DATABASE;
TO_CHAR(STANDBY_BECAME_PRIMARY_SCN)
----------------------------------------
733778
b)Ejecutar
sobre la vieja primaria
SQL>SHUTDOWN
IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> FLASHBACK
DATABASE TO SCN 733778;
c)Convertir la vieja primaria a standby fisica
Ejecutar en la vieja primaria
ALTER DATABASE CONVERT TO
PHYSICAL STANDBY;
Nota:este commando desmonta la base de datos.
d) Shut down and restart the database:
SQL> SHUTDOWN
IMMEDIATE;
SQL> STARTUP MOUNT;
9) Start transporting redo
to the new physical standby database.
Ejecutar en la nueva primaria
Set
lines 200;
col DESTINATION for a30
col DEST_name for a30;
col error for a10;
SELECT DEST_ID, DEST_NAME, STATUS,
PROTECTION_MODE, DESTINATION, ERROR,SRL FROM V$ARCHIVE_DEST_STATUS;
En
el caso
de obtener el siguente error :
ORA-12528:TNS:listener: all appropriate
instances are blocking new connection
Ejecutar
el siguente commando para asegurar que
la standby recibe los redo desde la
primaria.
SQL> ALTER SYSTEM SWITCH LOGFILE;
Verificar
que el error desaparecio.
SQL> SELECT DEST_ID, DEST_NAME, STATUS,
PROTECTION_MODE, DESTINATION, ERROR,SRL FROM V$ARCHIVE_DEST_STATUS;
No hay comentarios:
Publicar un comentario