DUPLICATE DATABASE FOR STANDBY
Es importante que consideremos que un posible desastre puede ocurrirle a nuestra base de datos productiva y en muchos casos puede que devenga en una pérdida total de servicio o del servidor mismo, donde si bien existe la posibilidad de hacer un restore de la base en un host distinto, es mucho el tiempo que nos llevaría hacerlo(Criticidad del Negocio) , sin tener los datos desde el punto en que se tomo el backup al momento de la pérdida, desatención del en el negocio, etc.
Es ahi donde ponemos en marcha nuestro plan de tener una base de datos secundaria, con la copia de todos los datos, y que pueda entrar rapidamente en contigencia en caso de que la base primaria de producción sufra una caida, se rompa un disco, no haya red, o hasta la perdidad completa del edificio donde se halla el servidor.
Oracle, nos provee una herramienta llamada dataguard, donde podemos generar una base standby, que sera la encargada de entrar en contingencia por medio de SWICTH_OVER o FAIL_OVER. También hay otros modos como DATAGUARD BROKER, que nos provee las mismas funcionalidades, pero en solo una ejecución de comandos.
Básicamente la estructura es una base Productiva, y n contingencias.
Cada contigencia es altamente recomendable tenerla en un host fuera del productivo, en lo posible en otro edificio.
Yo elegi en este caso la opción de armarlo con RMAN, y hacerlo con la opción que nos ofrece para ello por medio de DUPLICATE TARGET DATABASE FOR STANDBY.
Claramente hay que realizar una configuración previa que listo aquí mismo:
- Archivo de parámetros de la base (Pfile, spfile, init)
- listener.ora
- tnsnames.ora
- pwfile
- Que la base se encuentre en modo archivelog, un backup de RMAN «siempre es en caliente».
Para la configuración de los parámetros de la base, recomiendo leer la documentación oficial, y en breve yo expondre los que me toca modificar a mi:
Parámetros de inicio para el ROL PRIMARIO
DB_FILE_NAME_CONVERT: Toma todos los datafiles de la base y los convierte apropiadamente al nuevo path, EJ *_tbs hacia *_stbytbs
*.db_file_name_convert='+MBPRO_DG1/MBPRODG','+MBPRODG_DG1/MBPRO'
DB_LOG_FILE_CONVERT: Toma todos los redolog files y los convierte apropiadamente al nuevo path, EJ *_log hacia *_stbylog
*.log_file_name_convert='+MBPRO_DG1/MBPRODG','+MBPRODG_DG1/MBPRO'
FAL_SERVER: permite que el FAL_SERVER, ahora MBPRODG como primario, pueda enviar REDO hacia MBPRO.
*.fal_server='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=sdat4105lx.bancocredicoop.coop)(PORT=1529)))(CONNECT_DATA=(SERVICE_NAME=MBPRODG_XPT.bancocredicoop.coop)(SERVER=dedicated)))'
FAL_CLIENT: Este parámetro permite que la base primaria MBPRO al pasar a un rol standby pueda obtener los REDO, si la base MBPRODG, ahora en rol primario no pueda enviarlos.
*.fal_client='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=sdat4103lx.bancocredicoop.coop)(PORT=1529)))(CONNECT_DATA=(SERVICE_NAME=MBPRO_XPT.bancocredicoop.coop)(INSTANCE_NAME=MBPRO)(SERVER=dedicated)))'
LOG_ARCHIVE_CONFIG: Habilita a la base a enviar o recibir REDO, despúes de una transición de roles. Este especifica el parámetro correcto para el DG_CONFIG, del DB_UNIQUE_NAME y habilita dinamicamente la adhesión de n bases secundarias (STANDBY)
*.log_archive_config='DG_CONFIG=(MBPRO,MBPRODG)'
LOG_ARCHIVE_DEST_n: Especifica donde serán almacenados los REDO en la base primaria y secundarias.
*.log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST'
Transmite los archivos de REDO al destino de la base standby.
*.log_archive_dest_2='service="(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=sdat4105lx.bancocredicoop.coop)(PORT=1529)))(CONNECT_DATA=(SERVICE_NAME=MBPRODG_XPT.bancocredicoop.coop)(INSTANCE_NAME=MBPRODG)(SERVER=dedicated)))"',' ARCH SYNC NOAFFIRM delay=0 OPTIONAL max_failure=0 max_connections=1 reopen=300 db_unique_name="MBPRODG" register net_timeout=180 valid_for=(online_logfile,primary_role)'
LOG_ARCHIVE_DEST_STATE_n: Habilita a que sean enviados o generados los REDO en los path especificados en el parametro LOG_ARCHIVE_DEST_n, si este se encuentra en ENABLE.
LOG_ARCHIVE_DEST_STATE_1=ENABLE LOG_ARCHIVE_DEST_STATE_2=ENABLE
LOG_FILE_NAME_CONVERT: Convierte los paths donde se almacenan los REDO, en la primaria como en la secundaria.
*.log_file_name_convert='+MBPRODG_DG1/MBPRODG','+MBPRODG_DG1/MBPRO'
REMOTE_LOGIN_PASSWORDFILE: Habilita el mismo password para SYS en la primaria y la secundaria, se recomienda que este setado en EXCLUSIVE o SHARED.
*.remote_login_passwordfile='EXCLUSIVE'
Parámetros de inicio para el ROL SECUNDARIO
*.fal_client='MBPRODG' *.fal_server='MBPRO' *.db_file_name_convert='+MBPRO_DG1/MBPRO','+MBPRODG_DG1/MBPRODG' *.log_file_name_convert='+MBPRO_DG1/MBPRO','+MBPRODG_DG1/MBPRODG'
Teniendo todo configurado, ahora podemos arrancar con nuestro proceso de duplicar la base con RMAN convirtiendola en una STANDBY.
Primero vamos a tomar un HOT_BACKUP con RMAN.
Suelo crear un script y gurdarlo en el catalogo asi me resulta mas sencillo de correr.
[oracle@saturno bin]$ rman target / catalog=rman@catrman Recovery Manager: Release 10.2.0.4.0 - Production on Mon Sep 14 16:51:48 2009 Copyright (c) 1982, 2007, Oracle. All rights reserved. connected to target database: MBPRO (DBID=xxxxxxx) recovery catalog database Password: connected to recovery catalog database RMAN> list script names; List of Stored Scripts in Recovery Catalog Global Scripts Script Name Description ----------------------------------------------------------------------- full_cold_backup full_hot_backup incremental_copy RMAN> run {execute script full_hot_backup; }
Cuando finaliza el backup debemos pasarlo al mismo path que generamos en producción, en el equipo de contingencia, de lo contrario habrá que catalogar las piezas.
Nos logueamos en el equipo de contingencia, colocamos las variables de ambiente y ejecutamos el comando de RMAN bajo la siguiente sintaxis, recordemos que aca estamos utilizando el modo DUPLICATE, pero también podemos crear una STANDBY de forma MANUAL.
[oracle@saturno bin]$ rman target=sys@MBPRO catalog=rman@catrman auxiliary / Recovery Manager: Release 10.2.0.4.0 - Production on Wed Sep 16 14:23:02 2009 Copyright (c) 1982, 2007, Oracle. All rights reserved. target database Password: connected to target database: MBPRO (DBID=xxxxxxx) recovery catalog database Password: connected to recovery catalog database connected to auxiliary database: MBPRO (not mounted)
Una vez dentro podemos correr los comando de duplicate de RMAN para este caso en particular, DUPLICATE TARGET DATABASE FOR STANDBY;
RMAN> DUPLICATE TARGET DATABASE FOR standby; Starting Duplicate Db at 16-SEP-09 allocated channel: ORA_AUX_DISK_1 channel ORA_AUX_DISK_1: sid=154 devtype=DISK contents of Memory Script: { restore clone standby controlfile; sql clone 'alter database mount standby database'; } executing Memory Script Starting restore at 16-SEP-09 using channel ORA_AUX_DISK_1 channel ORA_AUX_DISK_1: restoring control file channel ORA_AUX_DISK_1: copied control file copy input filename=/u03/rman_database_backup/controlSTBY.ctl output filename=+MBPRO_DG1/MBPROdg/controlfile/current.257.697731795 Finished restore at 16-SEP-09 sql statement: alter database mount standby database released channel: ORA_AUX_DISK_1 WARNING: DB_FILE_NAME_CONVERT resulted in invalid ASM names; names changed to diskgroup only. contents of Memory Script: { set newname for tempfile 1 to "+MBPRO_DG1"; switch clone tempfile all; set newname for datafile 1 to "+MBPRO_DG1"; set newname for datafile 2 to "+MBPRO_DG1"; set newname for datafile 3 to "+MBPRO_DG1"; set newname for datafile 4 to "+MBPRO_DG1"; set newname for datafile 5 to "+MBPRO_DG1"; set newname for datafile 6 to "+MBPRO_DG1"; set newname for datafile 7 to "+MBPRO_DG1"; set newname for datafile 8 to "+MBPRO_DG1"; set newname for datafile 9 to "+MBPRO_DG1"; restore check readonly clone database ; } executing Memory Script executing command: SET NEWNAME renamed temporary file 1 to +MBPRO_DG1 in control file executing command: SET NEWNAME executing command: SET NEWNAME executing command: SET NEWNAME executing command: SET NEWNAME executing command: SET NEWNAME executing command: SET NEWNAME executing command: SET NEWNAME executing command: SET NEWNAME executing command: SET NEWNAME executing command: SET NEWNAME executing command: SET NEWNAME executing command: SET NEWNAME Starting restore at 16-SEP-09 allocated channel: ORA_AUX_DISK_1 channel ORA_AUX_DISK_1: sid=158 devtype=DISK channel ORA_AUX_DISK_1: starting datafile backupset restore channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set restoring datafile 00001 to +MBPRO_DG1 restoring datafile 00002 to +MBPRO_DG1 restoring datafile 00003 to +MBPRO_DG1 restoring datafile 00004 to +MBPRO_DG1 restoring datafile 00005 to +MBPRO_DG1 restoring datafile 00006 to +MBPRO_DG1 restoring datafile 00007 to +MBPRO_DG1 restoring datafile 00008 to +MBPRO_DG1 restoring datafile 00009 to +MBPRO_DG1 channel ORA_AUX_DISK_1: reading from backup piece /u03/rman_database_backup/20090914_MBPRO_t697567954_s1091_p1_dbf contents of Memory Script: { switch clone datafile all; } executing Memory Script datafile 1 switched to datafile copy input datafile copy recid=306 stamp=687025587 filename=+MBPRO_DG1/oapp1n/datafile/system.286.687024281 datafile 2 switched to datafile copy input datafile copy recid=307 stamp=687025587 filename=+MBPRO_DG1/oapp1n/datafile/undotbs1.301.687024277 datafile 3 switched to datafile copy input datafile copy recid=308 stamp=687025587 filename=+MBPRO_DG1/oapp1n/datafile/sysaux.287.687024279 datafile 4 switched to datafile copy input datafile copy recid=309 stamp=687025587 filename=+MBPRO_DG1/oapp1n/datafile/users.317.687024381 datafile 5 switched to datafile copy input datafile copy recid=310 stamp=687025587 filename=+MBPRO_DG1/oapp1n/datafile/undotbs2.295.687024279 datafile 6 switched to datafile copy input datafile copy recid=311 stamp=687025587 filename=+MBPRO_DG1/oapp1n/datafile/undotbs3.289.687024279 datafile 7 switched to datafile copy input datafile copy recid=312 stamp=687025587 filename=+MBPRO_DG1/oapp1n/datafile/MB_IDX.284.687024327 datafile 8 switched to datafile copy input datafile copy recid=312 stamp=687025587 filename=+MBPRO_DG1/oapp1n/datafile/MB_IDX.284.687024327 datafile 9 switched to datafile copy
Una vez finalizado el proceso, podemos ejecutar verificar se se están aplicando los logs.
select NAME, THREAD#, SEQUENCE#, APPLIED, registrar from v$archived_log where APPLIED='NO' order by sequence#;
De no ser asi hay que dar la orden para que comience el recovery de los REDO que están llegando desde la primaria.
ALTER DATABASE RECOVERY MANAGER STANDBY DATABASE CANCEL;
Buenos dias amigo saludos desde Venezuela ! encontre tu post y me parecio interesante ya que se me esta presentando un inconveniente con la configuracion de un dataguard sobre windows pero no me esta reconociendo el pwfile tu no sabes de algun tip que se deba tener en cuenta para el tratamiento especifico del Windows es un tema de permisos pero ya he verificado varias cosas y no me reconoce el archivo de password , algo relacionado con case sentitive ?? en realidad no se …. gracias por tu atencion si logras ver y responder algo !!!
Me gustaMe gusta
Otra cosa mas, es importante que me pases la version y si el error es alguno de estos:
OPW-00005
ORA-1017
ORA-1031
ORA-1996
también tene en cuenta que hayas seteado las variables de ambiente:
ORA_sid_PWFILE + ORA_PWFILE
Me gustaMe gusta
Gracias por tu atencion:
La version utilizada es la 10g 10.2.0.4
la linea de comando que estoy utilizando para crear el pwfile es:
orapwd file=E:\oracle\PRO\102\database\pwPRO password=xxxxx
Si le coloco las condiciones ignorecase=y me da error creo que eso aplica es para las 11g.
las variables que me indicas quedarian como?
ORA_PRO_PWFILE= LA RUTA DONDE ESTA EL ARCHIVO ? tengo que reiniciar ?
ORA_PWFILE=E:\oracle\PRO\102\database\pwPRO ?
En una oportunidad ley que habia algo relacionado con las mayusculas minusculas pero no encuentro la nota !
gracias !!!!
Me gustaMe gusta
Edgar:
Te cuento que la nota de la cual me hablas es la 225097.1, te puede servir de referencia para algunos controles, en cuanto al ignorecase, solo aplica para 11g en adelante.
En ORA_PRO_PWFILE pones el path, si no lo va a buscar directamente a lo que tengas en el ORA_PWFILE.
También podes buscar en el registro de windows.
Es importante que sepas que en las versiones de windows 10.2 se crea en mayúscula, y revisando en los windows que tengo aparece de esa manera, en tu caso sería PWDPRO.ora
La nomenclatura del comando es la siguiente:
orapwd FILE=PWDsid.ora PASSWORD=password ENTRIES=max_users FORCE=y/n
Y otra detalle importante es ORACLE_BASE\ORACLE_HOME\DATABASE\PWDPRO.ORA debe estar la extensión en mayúscula.
Podes ver tu seteo del archivo con TOOLS –> FOLDER OPTIONS –> VIEW –> y destildas HIDE FILE EXTENTIONS
Con eso podes ver que la extensión de tu archivo se la correcta, por ahí encontras que tu init sea : initPRO.ora y tu pwfile debería ser PWPRO.ORA.
Espero te sea de ayuda.
Próximamente posteare la diferencias entre UNIX , WIN y las versiones 11 y 10.
Me gustaMe gusta
Edgar, Buenos Días, te pido si podes subir el log del error que te arroja como salida cuando no lo puede leer y si podes poner la linea de comandos que estas empleando , de esa manera puedo darte una respuesta que se aproxime a la solucion. Saludos !
Me gustaMe gusta
Buenas tardes :
Juan resuelto el tema!!! ya me funciono !!
Me gustaMe gusta
Buenas,
Navegando he llegado a este post en el que me podrias ayudar a montar un dataguard para un linux en Oracle 11g. La verdad que mirando por internet, he visto que hay varias formas de hacer un data guard, o bien de forma fisica o bien logica. La que intento implementar yo es la primera, un data guard fisico.
Tengo un par de dudas. Una de ellas es si la base de datos standby, tiene que estar previamente creada por el asistente de creacion de base de datos de Oracle11g o si directamente se crea mientras se configura el data guard.
De resto me gustaria que me mandaras paso por paso como montarlo en una maquina que tiene la base de datos primaria y otra maquina que tiene o que va a albergar el data guard.
Muchas gracias y un cordial saludo
Me gustaMe gusta
Tengo un par de dudas.
Una de ellas es si la base de datos standby, tiene que estar previamente creada por el asistente de creacion de base de datos de Oracle11g o si directamente se crea mientras se configura el data guard.
Mira, podes armar un dataguard en 11g de dos maneras:
1) Tomando un backup de la primaria, configurar los parametros y que salga andando.
2) Sin tomar un backup de la primaria.
De resto me gustaria que me mandaras paso por paso como montarlo en una maquina que tiene la base de datos primaria y otra maquina que tiene o que va a albergar el data guard.
Suscribite al blog y ahi se registra tu correo y te lo envio.
Saludos.
Me gustaMe gusta
ah! ademas quisiera saber si existen requisitos de sistema, programas, procesador o cualkier requisito de compatibilidad para hacer el dataguard. GRACIAS
Me gustaMe gusta
Hola , estoy realizando un proyecto de Oracle 11g en el cual , entre mucha cosa ,como el uso de los paquetes DBMS_PIPE , ALERT , AQ , AQADM , SCHEDULER , UTL_FILE …. etc necesito implementar una configuración DATA GUARD como la del post , pero tengo muchas dudas , porque no se si la bd stanby debe estar creada desde el principio con el asistente o se crear mientras se esta configurando , porfavor si me lo pudieras explicar más detalladamente me harías un gran favor , tenga en cuenta que soy más de programación y no he prácticado mucho con RMAN
Muchas Gracias y un Saludo
Me gustaMe gusta
Estimado Andres buenas tardes, estoy en un proyecto en el cual tengo que realizar un stanby contra un RAC hecho en 11gr2 que tiene dos dg (data y fra) en hpux. El stanby en una base 11gr2 con oracle Restar tambien con 2 dg (data,fra). Me podrias ayudar indicandome paso a paso como lo tengo que hacer utilizando el duplicate del rman, el nombre de la base rac es racprod. El nombre de la standby todavia no la se, pero podria ser el mismo nombre o debe ser racstby. Ya me suscribi a tu blog y dejame decirte que esta excelente.
Me gustaMe gusta
Ivan:
Pregunta… Cual es el tamaño del backup ? y Otra… tienes algun tipo de firewall entre el sitio primario y secundario ? Saludos.
Me gustaMe gusta
Hola, cuanto tiempo aprox. demora en instalar y configurar Dataguard para DB Oracle 11g R2?,
Algun sitio de referencia?
Saludos, excelente sitio y espero tu respuesta.
Me gustaMe gusta
Depende en el punto donde estes parado, la configuracion es rapida, bien organizado te deberia llevar dos dias de trabajo, dependiendo del tamaño de la base de datos, pero a eso le tenes que agregar tiempo de diseño, armado del sitio de contingencia y algunas otras cosa mas. Saludos !
Me gustaMe gusta
Hola, cuanto se demora ejecutar un Duplicate sobre una DB de 100GB? y cuanto demora aprox en replicar la estructura de la DB en la de destino y montar los datos?, como se llama o con que comando se ejecuta esa actualización en la DB destino?.
Saludos!
Me gustaMe gusta
Depende del Procesador y memoria que tengas, tambien del OS. Tambien depende de cuanto ancho de banda tengas para pasar los datos. Con comando para la actualizacion a que te referis ? Saludos
Me gustaMe gusta
Este procedimiento para qué versión es? Me sirve para 11203?
Me gustaMe gusta