Crear instancia de DataGuard

noviembre 29, 2016
admin

Nota: la instalacion de Oracle RDBMS se instala en la BD primaria y Standby, en este caso en la standby solo tiene la instalacion.

Primaria:

IP Address: 192.168.2.61
DB_NAME=test
DB_UNIQUE_NAME=test

Standby:

IP Address: 192.168.2.62
DB_NAME=test
DB_UNIQUE_NAME=test_stby

Parametros requeridos:

DB_NAME                                             – Tiene que ser la misma en primaria y standby
DB_UNIQUE_NAME                             – Tiene que ser diferente en la primaria y todas las standby
LOG_ARCHIVE_CONFIG             –  Este parametro incluye el db_unique name que forma parte de la configuracion del DataGuard
LOG_ARCHIVE_DEST_n                     – Define donde se guardaran los archive logs locales y remotos
LOG_ARCHIVE_DEST_STATE_n        – Define el estado del guardado de archive logs, )enable o disable)
REMOTE_LOGIN_PASSWORDFILE    – Siempre tiene que estar en modo EXCLUSIVE
FAL_SERVER                                        – Se usa para resolver como se aplican los archivelogs (solo se requiere en el standby)
DB_FILE_NAME_CONVERT                 – Se requiere cuando la estructura de directorios estan tiene otro datafile (osea los dbf se almacenan en diferentes unidades entre el primario y standby)
LOG_FILE_NAME_CONVERT               – Requiere cuando la estrictura del directorio va a tener otro redolog
STANDBY_FILE_MANAGEMENT          – Para que cree archivos nuevos en el standby

 

Los siguientes pasos en la base de datos primaria:

Nota: Asegurarse que la base de datos este prendida en modo ARCHIVELOG

Revisa tu instancia con los siguientes comandos

SQL> select log_mode from v$database;
              O
SQL> archive log list

Si no esta corriendo, activas los archivelogs con el siguiente secuencia de comandos.

SQL> SHU IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;

Ahora tu instancia esta en modo archivelog

Nota: asegurate que tu BD esta en modo forcelogging.

SQL> SELECT FORCE_LOGGING FROM V$DATABASE;

Si no lo esta, ejecuta el siguiente comando

SQL> ALTER DATABASE FORCE LOGGING;

Ahora verifica el parametro DB_NAME y DB_UNIQUE_NAME de la instancia primaria

SQL> show parameter db_name
SQL> show parameter db_unique_name

Ahora cambia elDB_UNIQUE_NAME Para que forme parte del dataguard. (El servicio de standby aun no se ha creado)

SQL> alter system set log_archive_config=’DG_CONFIG=(test,test_stby)’; 

(test es el service name de la primaria y test_stby es el nombre de la BD standby)

Luego sigue crear el servicio usando netmgr

SQL> host
$netmgr –> service add for std (+) –> net service name std –> hostname standby machine ip –> service name std –> save

Ahora inicia el listener

$lsnrctl start

Define donde se guardaran los archivelogs

SQL> alter system set log_archive_dest_2=’service=std Valid_for=(online_logfiles, primary_role) db_unique_name=std’;

SQL>alter system set log_archive_dest_state_2=enable;

Tienes que configurar el remote password como “exclusive”

SQL> alter system set remote_login_passwordfile=exclusive scope=spfile;
SQL> show parameter remote_login

Se define el “fail server” y si se quiere reconvertir la ruta, por si las rutas entre servidores son diferentes

SQL> ALTER SYSTEM SET FAL_SERVER=test;

SQL> ALTER SYSTEM SET DB_FILE_NAME_CONVERT=’test_stby’,’test’ scope=spfile;

SQL> ALTER SYSTEM SET LOG_FILES_NAME_CONVERT=’test_stby’,’test’ scope=spfile;

SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;

Ahora sigue replicar la instancia entre servidores (hacer la clonacion), para hacerlo en caliente, se hace con RMAN como sigue

$rman target=/

RMAN> BACKUP DATABASE PLUS ARCHIVELOG;

Ahora se crean los controlfile de standby y el nuevo pfile

SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS ‘/u01/stdcontrol.ctl’;

SQL> CREATE PFILE=’/u01/inittest_stby.ora’ from spfile;

Ahora editas el nuevo spfile

$vi /u01/inittest_stby.ora

 Nota:- El pfile debe de verse algo asi.

std.__db_cache_size=318767104
std.__java_pool_size=4194304
std.__large_pool_size=4194304
std.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
std.__pga_aggregate_target=335544320
std.__sga_target=503316480
std.__shared_io_pool_size=0
std.__shared_pool_size=159383552
std.__streams_pool_size=4194304
*.audit_file_dest='/u01/app/oracle/admin/std/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/u01/app/oracle/oradata/test_stby/control01.ctl','/u01/app/oracle/fast_recovery_area/test_stby/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_file_name_convert='test','test_stby'
*.db_name='test'
*.db_unique_name='test_stby'
*.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
*.db_recovery_file_dest_size=4322230272
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=testXDB)'
*.fal_server='TEST'
*.log_archive_config='DG_CONFIG=(test,test_stby)'
*.log_archive_dest_2='SERVICE=test VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=test'
*.log_archive_dest_state_2='ENABLE'
*.log_file_name_convert='test','test_stby'
*.memory_target=836763648
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.standby_file_management='AUTO'
*.undo_tablespace='UNDOTBS1'

Se graba este archivo y luego creamos los directorios en la maquina de Standby

$mkdir -p /u01/app/oracle/admin/test_stby/adump

$mkdir -p /u01/app/oracle/oradata/test_stby

$mkdir -p /u01/app/oracle/fast_recovery_area/test_stby

Despues de crear los directorios en el servidor de standby y copiar los backupsets, atchivelogs, pfile, controlfile generado con el standby y el archivoe de password hacia el servidor standby.

#scp /u01/stdcontrol.ctl oracle@192.168.1.20:/u01/app/oracle/oradata/test_stby/control01.ctl
#scp /u01/stdcontrol.ctl oracle@192.168.1.20:/u01/app/oracle/fast_recovery_area/test_stby/control02.ctl

Transfiere archivelogs y backups
#scp –r /u01/app/oracle/fast_recovery_area/test oracle@192.168.2.62:/u01/app/oracle/fast_recovery_area/

Copy Parameter file

#scp /u01/inittest_stby.ora oracle@192.168.2.62:/u01/inittest_stby.ora

Transfiere el archivo de password de oracle

#scp /u01/app/oracle/product/11.2.0.4/db_1/dbs/orapwdtest oracle@192.168.1.62:/u01/app/oracle/product/11.2.0.4/db_1/dbs/orapwtest_stby

En el servidor de Standby

$export ORACLE_HOME=/u01/app/oracle/product/11.2.0.1/db_1

Crear el servicio de tnsnames

$netmgr
 =>service naming
           + add new
              Net service name (test)
                      Host name (oradb1)
                             Service name (test)
Prueba la conexion y luego termina
Otro servicio para la standby
        + add new
           Net service name (test_stby)
                 Host name (oradb2)
                         Service name (test_stby)
                                     finish

clic en file => save network configuration

inicia listener

$lsnrctl start

Actualiza /etc/oratab en el standby

$vi /etc/oratab  (add below line in end of file) 

Std:/u01/app/oracle/product/11.2.0.4/db_1:N

restauras backup en el standby

$export ORACLE_SID=test_stby
$sqlplus / as sysdba
Sql> create spfile from pfile=’/u01/inittest_stby.ora’;

Ahora sales del sqlplus y restauras usando rman

Sql> exit

$rman target=/
RMAN>startup mount
RMAN> restore database;
RMAN> exit

Nota: Despues de terminar la restauracion, ocupamos crear los redolog del standby en el servidor de standby

$sqlplus / as sysdba
SQL> alter database add standby logfile (‘/u01/app/oracle/oradata/test_stby/standby_redo01.log’) size 50m;
SQL> alter database add standby logfile (‘/u01/app/oracle/oradata/test_stby/standby_redo02.log’) size 50m;
SQL> alter database add standby logfile (‘/u01/app/oracle/oradata/test_stby/standby_redo03.log’) size 50m;
SQL> alter database add standby logfile (‘/u01/app/oracle/oradata/test_Stby/standby_redo04.log’) size 50m;

Note: ocupamos agregar cuadro archivos de redo log, por que solo tenemos 3 redo logs

Ahora revisa los miembros del grupo de los redologs y puedes confirmarlo con los siguientes querys

SQL> select member from v$logfile  where type=’STANDBY’;

SQL> select member from v$logfile;

 

Nota:- Ahora creamos los mismos redologs en el servidor primario, esto es importante para configurar el cambio de roles, cuando quieras switchear la primaria a Standby, por eso ocupa estos redologs.

Entonces en el servidor primario se agregan los redologs

SQL> alter database add standby logfile (‘/u01/app/oracle/oradata/test/standby_redo01.log’) size 50m;
SQL> alter database add standby logfile (‘/u01/app/oracle/oradata/test/standby_redo02.log’) size 50m;
SQL> alter database add standby logfile (‘/u01/app/oracle/oradata/test/standby_redo03.log’) size 50m;
SQL> alter database add standby logfile (‘/u01/app/oracle/oradata/test/standby_redo04.log’) size 50m;

revisamos

SQL> select member from v$logfile  where type=’STANDBY’;

Ahora inicias la aplicacion de redo logs en la instancia Standby

Recomendado, que antes de aplicar los redologs, abrir el alert en otra ventana

En el servidor standby

SQL> alter database recover managed standby database disconnect from session;

Ejecuta el comando de abajo para revisar la secuencia de redo logs

En el servidor primario

SQL> select sequence#,first_time,next_time from v$archived_log order by sequence#;

Para cuestiones de pruebas, switchea de redo log, para ver si lo esta generando en el secundario

SQL> alter system switch logfile;

Then check what your current sequence number on PRIMARY machine is

SQL> select sequence#,first_time,next_time from v$archived_log order by sequence#;

Luego nos vamos al standby para revisar que este enviando los redologs

en el STANDBY:-

SQL> select sequence#,first_time,next_time,applied from v$archived_log order by sequence#;

Ahora nos vamos al primario para hacer otro switch para ver si los manda al standby.

SQL> alter system switch logfile;

Ahora revisa el nivel de proteccion de ambos servidores

SQL> desc v$database
SQL> select name,open_mode,database_role,db_unique_name,protection_mode from v$database;

YA QUEDO….

 

 

Pasos para configurar el modo de solo lectura en el STANDBY

En la Standby

Ahora convertiremos el standby en modo de solo lectura

En este caso, la BD se podra leer solamente

SQL>Shu immediate
SQL>startup mount;
SQL>alter database open read only;

Despues de correr esos comandos, la instancia sera accesible como solo lectura

Revisamos:

SQL> select name,open_mode,database_role,db_unique_name,protection_mode from v$database;
SQL> select * from scott.emp;   (now you able to read your database)

Ahora nos logueamos en la PRIMARIA y corremos el switch

SQL>alter system switch logfile;

Ahora revisamos si en la standby se aplico o no

SQL> select sequence#,first_time,next_time,applied from v$archived_log order by sequence#;

Nota:-Puedes ver los redo logs nuevos, pero no se han aplicado

Por lo tanto, cuando la instancia esta en modo de solo lectura y es accesible, pero no se aplican los nuevos redologs

Si quieres que vuelva a ser standby normal, es con los siguientes comandos

SQL> shu immediate

SQL> startup mount

SQL> alter database recover managed standby database disconnect from session;

No comments

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *