UnDomain Un friki suelto por la red

Como montar un Oracle DataGuard con Phisical Standby en Oracle 10g


Durante los días de vacaciones (vacaciones de mis compañeros de trabajo, claro), me he dedicado, entre otras cosas, a montar un DataGuard en Oracle 10g con una Standby física en unas máquinas de taller que me han montado muy amablemente para esto.

Como todo buen padawan que se precie, cuando toca hacer algo que nunca has hecho, lo primero que se hace es preguntárselo al Maestro Google, que para eso sabe mucho y es el maesto.

Mi primera sorpresa es la poca información que encontré en cristiano... todo venia en el idioma de la Pérfida Albión.
También es posible que yo no lo supiera buscar correctamente...

Puesto que me tocaba tragarme mi opinión sobre el idioma de los hijos de la Gran Bretaña, decidí finalmente seguir "fil parranda" los pasos indicados por la documentación original y oficial de Oracle.

Utilizando el manual oficial de oracle dedicado a los DataGuard y guiado por una nota oficial del MetaLink (343424.1), conseguí montar con éxito, pero no sin esfuerzo, el correspondiente Dataguard.

A continuación indico paso a paso como lo he hecho...

La plataforma que he utilizado es la siguiente:

  • Host VMWARE con Windows 2003 Standar Edition.
  • Oracle 10.2.0.4 Enterprise Edition.
  • Primary DB SID: CHICAGO
  • Standby DB SID: BOSTON

NOTA: Todos los comandos indicados son ejecutados con el usuario SYS conectado como SYSDBA.

Antes de empezar, aclarar los términos que utilizo durante toda la explicación:
PRIMARY: BDD Primary
STANDBY: BDD Standby (StandBy física)
SPFILE: Fichero de inicio en binario (NO se puede modificar mediante un editor de texto). Su nombre suele ser SPFILE.ORA (P.E.: SPFILEboston.ORA)
PFILE: Fichero de inicio en texto (se ha de modificar mediante un editor de texto). Su nombre suele ser INIT.ORA (P.E.: INITboston.ORA)

La creación de las BDD ha sido mediante la instalación por defecto, no se han modificado ni parámetros ni rutas.
Estos pasos sirven tanto para crear un DataGuard con una BDD nueva como con una existente. En el caso de hacerlo sobre una BDD con información útil es muy importante que antes hagas una copia de seguridad de todos los objetos importantes (DataFile, SPFile/PFile, Logs, Arc, etc...).

A partir de aquí, los pasos son los que he seguido y no tienen porque ser exactamente iguales a la documentación de Oracle.
También es posible que algunos pasos sean repetitivos o se puedan hacer de una manera mas sencilla, pero estos son los pasos que he seguido y me ha funcionado perfectamente.

Partimos con que están las dos BDD creadas. La BDD StandBy tendría que ser una instalación completamente limpia, ya que eliminaremos el fichero de configuración, los DataFiles y los Control files.

Lo primero que tendríamos que asegurarnos es que existe visibilidad entre la PRIMARY y la STANDBY. Para eso tenemos que configurar el TNSNAMES de cada servidor añadiendo la entrada que corresponda (es decir, añadir la PRIMARY en el TNSNAMES de la STANDBY y viceversa).
Verifica que se ven mutuamente haciendo un TNSPING a las dos BDD desde cada uno de los servidores.

Personalmente, prefiero realizar la primera configuración (sobre la PRIMARY) mediante SPFILE. Esto nos permite asegurarnos que las modificaciones de los parámetros de inicio se ha hecho correctamente sin necesidad de reiniciar la BDD (aunque requiera reiniciar la BDD para que se apliquen las modificaciones), o como mínimo que el parámetro que hemos modificado es correcto.
En el caso de que la PRIMARY se inicie mediante PFILE, lo configuraremos temporalmente para que inicie mediante SPFILE.

Para crear el SPFILE lanzamos la siguiente instrucción:
SQL> CREATE SPFILE FROM PFILE;

Después, renombramos el PFILE (nos servirá de backup por si algo sale mal) y reiniciaremos la PRIMARY:
SQL> SHUTDOWN IMMEDIATE
SQL> STARTUP

Ya tenemos la PRIMARY arrancada con el SPFILE. Ahora, todas las modificaciones de parámetros se han de hacer mediante ALTER.

Para empezar, necesitamos que la PRIMARY tenga activado el modo ARCHIVELOG. Para ello, lanzamos los siguientes comandos:
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1 = 'LOCATION=C:\oracle\product\10.2.0\ARCH' SCOPE=SPFILE;
SQL> ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='%t_%s_%r.dbf' SCOPE=SPFILE;
SQL> SHUTDOWN IMMEDIATE
SQL> STARTUP MOUNT
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;

Es recomendable que tener activado el modo FORCE LOGGING. No es imprescindible, pero si recomendado, al menos que esté el máximo tiempo posible activado.
Para ello, lanzamos el siguiente comando:
SQL> ALTER DATABASE FORCE LOGGING;

Ahora tenemos que crear en la PRIMARY los redolog que usará la STANDBY. Para ello, identificamos primero los que hay con los siguientes comandos...
-- Redolog existentes
SQL> SELECT * FROM V$LOGFILE;
-- Tamaño de cada uno de ellos
SQL> SELECT BYTES/1024/1024 MB FROM V$LOG;

...y creamos nuevos ficheros de standby del mismo tamaño y con un número de grupo secuencial (por defecto, Oracle crea 3 ficheros de 50MB) :
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 ('c:\oracle\product\10.2.0\oradata\chicago\redosb01.log') SIZE 50M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 ('c:\oracle\product\10.2.0\oradata\chicago\redosb02.log') SIZE 50M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 ('c:\oracle\product\10.2.0\oradata\chicago\redosb03.log') SIZE 50M;

Ya tenemos la PRIMARY pre-configurada.

Para continuar, tenemos que para la PRIMARY (y la STANDBY, si la teníamos arrancada):
SQL> SHUTDOWN IMMEDIATE

Con las dos BD paradas hacemos un backup de los DataFiles, Redolog Online y Standby logs de la PRIMARY y los restauramos sobre la STANDBY.
Oracle recomienda utilizar el RMAN, pero yo he realizado una copia normal y corriente de los ficheros a través de la red.
IMPORTANTE: NO INICIAREMOS NINGUNA BDD. ¡ESPECIALMENTE LA STANDBY!

Ahora, desde la PRIMARY generaremos un fichero de control para la STANDBY con la siguiente secuencia de comandos:
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS 'c:\stdby.ctl';
SQL> ALTER DATABASE OPEN;

Copiamos este fichero de control en el servidor de la STANDBY (en nuestro caso: C:\oracle\product\10.2.0\oradata\boston).

Copiamos también el fichero de password de la PRIMARY en la STANDBY en la misma ruta donde se encuentra en la PRIMARY (en nuestro caso: C:\oracle\product\10.2.0\db_1\database\PWDchicago.ora).

Ahora generamos un PFILE con todas las modificaciones que hemos hecho en la PRIMARY con el siguiente comando (este fichero lo podremos modificar posteriormente mas cómodamente que el SPFILE):
SQL> CREATE PFILE FROM SPFILE;

Una vez que tenemos el PFILE, renombraremos el SPFILE para que no lo use en el arranque y lo guardaremos como backup.
Modificaremos los siguientes campos del PFILE (si hay alguno que no existe, lo creamos):

db_name='chicago'
db_unique_name='chicago'
LOG_ARCHIVE_CONFIG='DG_CONFIG=(chicago,boston)'
LOG_ARCHIVE_DEST_1='LOCATION=C:\oracle\product\10.2.0\ARCH
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=chicago'
LOG_ARCHIVE_DEST_2='SERVICE=boston
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=boston'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
LOG_ARCHIVE_MAX_PROCESSES=30
log_archive_format='%t_%s_%r.dbf'
STANDBY_FILE_MANAGEMENT=AUTO
STANDBY_ARCHIVE_DEST='C:\oracle\product\10.2.0\ARCH'
FAL_SERVER='boston'
FAL_CLIENT='chicago'

El PFILE quedará de la siguiente manera (la cantidad de campos y sus valores varían en función de la configuración previa de la BDD):

chicago.__db_cache_size=197132288
chicago.__java_pool_size=4194304
chicago.__large_pool_size=4194304
chicago.__shared_pool_size=83886080
chicago.__streams_pool_size=0
*.audit_file_dest='C:\oracle\product\10.2.0\admin\chicago\adump'
*.background_dump_dest='C:\oracle\product\10.2.0\admin\chicago\bdump'
*.compatible='10.2.0.3.0'
*.control_files='C:\oracle\product\10.2.0\oradata\chicago\control01.ctl','C:\oracle\product\10.2.0\oradata\chicago\control02.ctl','C:\oracle\product\10.2.0\oradata\chicago\control03.ctl'
*.core_dump_dest='C:\oracle\product\10.2.0\admin\chicago\cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='chicago'
*.db_unique_name='chicago'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=chicagoXDB)'
*.job_queue_processes=10
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(chicago,boston)'
*.LOG_ARCHIVE_DEST_1='LOCATION=C:\oracle\product\10.2.0\ARCH
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=chicago'
*.LOG_ARCHIVE_DEST_2='SERVICE=boston
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=boston'
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.log_archive_format='%t_%s_%r.dbf'
*.LOG_ARCHIVE_MAX_PROCESSES=30
*.STANDBY_FILE_MANAGEMENT=AUTO
*.STANDBY_ARCHIVE_DEST='C:\oracle\product\10.2.0\ARCH'
*.open_cursors=300
*.pga_aggregate_target=96468992
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=290455552
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='C:\oracle\product\10.2.0\admin\chicago\udump'
*.FAL_SERVER='boston'
*.FAL_CLIENT='chicago'

Ese mismo fichero lo usaremos para la STANDBY. La idea es copiar el fichero PFILE a la STANDBY y posteriormente modificar los campos necesarios.

Ahora iniciamos la PRIMARY confirmando que todos los datos están bien (si hay alguno mal, nos mostrará un error al arrancar).
IMPORTANTE: TODAVIA NO INICIAREMOS LA STANDBY!!!!
SQL> STARTUP

Ya tenemos la PRIMARY completamente configurada y preparada. Ha llegado la hora de dedicarnos a la STANBY.

Partiendo del PFILE de la PRIMARY, modificamos (o creamos desde el principio) el PFILE de la STANDBY modificando los datos correspondientes. En este caso, los datos serán los siguientes:

db_name='chicago'
db_unique_name=boston
control_files='C:\oracle\product\10.2.0\oradata\boston\stdby.ctl'
LOG_ARCHIVE_CONFIG='DG_CONFIG=(chicago,boston)'
LOG_ARCHIVE_DEST_1='LOCATION=C:\oracle\product\10.2.0\ARCH
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=boston'
LOG_ARCHIVE_DEST_2='SERVICE=chicago LGWR ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=chicago'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
LOG_ARCHIVE_MAX_PROCESSES=30
log_archive_format='%t_%s_%r.dbf'
STANDBY_FILE_MANAGEMENT=AUTO
STANDBY_ARCHIVE_DEST='C:\oracle\product\10.2.0\ARCH'
FAL_SERVER=chicago
FAL_CLIENT=boston
DB_FILE_NAME_CONVERT='chicago','boston'
LOG_FILE_NAME_CONVERT='C:\oracle\product\10.2.0\oradata\chicago\','C:\oracle\product\10.2.0\oradata\boston\'

IMPORTANTE: SI PARTES DEL PFILE DE LA PRIMARY RECIERDA MODIFICAR EL NOMBRE DE LA BDD EN TODAS LAS LINEAS O NO FUNCIONARÁ CORRECTAMENTE.

El fichero PFILE de la STANDBY quedará de la siguiente manera:

boston.__db_cache_size=197132288
boston.__java_pool_size=4194304
boston.__large_pool_size=4194304
boston.__shared_pool_size=83886080
boston.__streams_pool_size=0
*.audit_file_dest='C:\oracle\product\10.2.0\admin\boston\adump'
*.background_dump_dest='C:\oracle\product\10.2.0\admin\boston\bdump'
*.compatible='10.2.0.3.0'
*.control_files='C:\oracle\product\10.2.0\oradata\boston\stdby.ctl'
*.core_dump_dest='C:\oracle\product\10.2.0\admin\boston\cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='chicago'
*.db_unique_name='boston'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=bostonXDB)'
*.job_queue_processes=10
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(chicago,boston)'
*.LOG_ARCHIVE_DEST_1='LOCATION=C:\oracle\product\10.2.0\ARCH
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=boston'
*.LOG_ARCHIVE_DEST_2='SERVICE=chicago LGWR ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=chicago'
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.log_archive_format='%t_%s_%r.dbf'
*.LOG_ARCHIVE_MAX_PROCESSES=30
*.STANDBY_FILE_MANAGEMENT=AUTO
*.STANDBY_ARCHIVE_DEST='C:\oracle\product\10.2.0\ARCH'
*.open_cursors=300
*.pga_aggregate_target=96468992
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=290455552
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='C:\oracle\product\10.2.0\admin\boston\udump'
*.FAL_SERVER='chicago'
*.FAL_CLIENT='boston'
*.DB_FILE_NAME_CONVERT='chicago','boston'
*.LOG_FILE_NAME_CONVERT='C:\oracle\product\10.2.0\oradata\chicago\','C:\oracle\product\10.2.0\oradata\boston\'

Es hora de iniciar la STANDBY. Para ello, utilizaremos los siguientes comandos:
SQL> STARTUP MOUNT
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;

Ya tenemos el DataGuard montado, pero ¿como sabemos que realmente se están replicando los logs?
Pues bien, para verificar la transferencia de los LOGS, seguiremos los siguientes pasos:

1.- Listamos los LOGS existentes en la STANDBY:
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

2.- Forzamos el cambio de LOG en la PRIMARY:
SQL> ALTER SYSTEM SWITCH LOGFILE;

3.- Verificamos que se han replicado y aplicado los LOGS en la STANDBY (la columna APP tiene que mostrar YES):
SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

Si aparecen la misma cantidad de registros en la PRIMARY que en la STANDBY, y la columna APP tiene YES en todos los registros, significa que nuestro DataGuard esta completamente operativo.
Has de tener en cuenta que la transferencia de los LOGS y su aplicación no es instantánea, depende la velocidad de red y de disco (si los LOG son muy grandes). Si no te salen los logs, o te salen con la columna APP a NO, tomate antes unos minutos de descanso y luego verifícalo de nuevo.

En el caso de que no se transfieran los LOGS o no se apliquen, revisa todos los valores de los PFILE.

Por último, si queremos que nuestras BDD inicien con SPFILE solo tenemos que lanzar el siguiente comando en cada una de ellas:
SQL> CREATE SPFILE FROM PFILE;

Woa, nivelazo Moi. Me ha

Woa, nivelazo Moi.
Me ha traido algunos recuerdos, esto es arquitectura activo-pasivo verdad? cuando te peta la primera tienes que hacer un comando para activar la standby recover from standby o algo asi verdad?

hehehehe.... dudo que en

hehehehe.... dudo que en Rete/Auna/Ono te dejaran hacer cosas de estas :D

La verdad es que el tema de la restauración todavia lo estoy "estudiando", pero en principio seria simplemente levanta la Standby de manera normal con un startup (antes tienes que cancelar el Recover managed), cuando resucite la Primary, restaurar los Archivers de la StandBy y reactivarle el Recover Managed.

Tengo en el tintero alguna ampliación de este articulito con los impactos de rendimiento según el metodo de replicación de logs y la actualización en tiempo real.

P.D.: Muchas gracias por el comentario ;)

En rete no, pero yo me fui

En rete no, pero yo me fui mucho antes que tu eh!!! XDDD, aunque en rete al final pude hacer mucho mas de lo que pensaba en un principio.

Creo recordar que debias tener mucho cuidado al poner en activo el stand by, ya que una vez que lo pones activo, ya no hay vuelta atras, tienes que regenerar el entorno para la proxima vez.

Sobre lo del rendimiento, creo que yo vi algunas incidencias a la hora de aplicar los logs
En GE usaban el entorno de standby con una base de datos de reporting montada y cuando hacia falta se bajaba reporting y se ponia activo el standby.

De nada hombre, a ver si vas publicando las pruebas que hagas :)

Vaya por fin puedo escribir

Vaya por fin puedo escribir mensajes, el anterior formato no me dejaba xD pues nose, mola el diseño y... que frikie eres tio xD (espero la pizza)

Una consulta el Hardware y

Una consulta el Hardware y version sistema operativo debe ser el mismo en cada nodo?
Muchas gracias

El SO si, el hardware no. Es

El SO si, el hardware no.
Es decir, los dos han de tener el mismo SO aunque difiera de versión (windows, unix, linux), pero el hardware no afecta para nada.
Lo que no se es como puede afectar si en un nodo pones un AIX y en otro un SOLARIS o un HPUX. Lo mas recomendable es que sean exactamente la misma versión, si se puede.

Hola, cuando dices :

Hola,
cuando dices : "Modificaremos los siguientes campos del PFILE (si hay alguno que no existe, lo creamos):

db_name='chicago'
db_unique_name='chicago'
LOG_ARCHIVE_CONFIG='DG_CONFIG=(chicago,boston)'
LOG_ARCHIVE_DEST_1='LOCATION=C:\oracle\product\10.2.0\ARCH
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=chicago'
LOG_ARCHIVE_DEST_2='SERVICE=boston
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=boston'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
LOG_ARCHIVE_MAX_PROCESSES=30
log_archive_format='%t_%s_%r.dbf'
STANDBY_FILE_MANAGEMENT=AUTO
STANDBY_ARCHIVE_DEST='C:\oracle\product\10.2.0\ARCH'
FAL_SERVER='boston'
FAL_CLIENT='chicago'"
Por qué te refieres a chicago ,que es la bd standby, si se supone que estas configurando el PFILE de la bd primary???

Muchas gracias de antemano.
Un saludo.
Mónica.

UO! Has encontrado una

UO!
Has encontrado una "pequeña" errata:
CHICAGO es la Prymary
BOSTON es la StandBy

Muchas gracias por ver el dato.... ahora mismo lo arreglo :P

Perdon por el lapsus T_T

Es correcto que en el fichero

Es correcto que en el fichero PFILE de la STANDBY tengamos estos parámetro así: *.db_name='chicago'
*.db_unique_name='boston'?
Gracias.
Mónica.

Si, es correcto. Si no se

Si, es correcto.
Si no se pone así, tendrias errores a la hora de que la StandBy intente aplciar los redolog offline.

Gracias, entonces... por qué

Gracias, entonces... por qué cuando intento "startup mount" la standby, me sale este error: " ORA-01103: database name Boston in control file is not Chicago". Te pasó a ti también?

Recuerdo que me pasó... y

Recuerdo que me pasó... y creo que fué algo de los CTL. ¿Los has copiado de la Primary a la StandBy manteniendo los existentes de la StandBy?
Revisalos... y tambien la parte de los pfile que hace la conversión de nombres y rutas:
DB_FILE_NAME_CONVERT='chicago','boston'
LOG_FILE_NAME_CONVERT='C:\oracle\product\10.2.0\oradata\chicago\','C:\oracle\product\10.2.0\oradata\boston\'

Yo también creo que tiene que

Yo también creo que tiene que ver con los CTL. Sí, los he copiado de la Standby a la Primary, pero no manteniéndolos, ya que se sobreescriben. Entonces, cuáles debería usar en la standby? Los que he copiado de la primary?
Muchas gracias.

En principio, genero unos

En principio, genero unos nuevo CTLs con nombre distinto para que los use la StandBy. De esta manera te evitas sobreescribir. Es decir, no hay que eliminar los CTLs originales de la StandBy.

Por ahora todo bien, pero por

Por ahora todo bien, pero por último: la standbye tiene que ser arrancada en modo mount o en modo open para que todo empiece a funcionar?
Muchas gracias por tu ayuda.Me está siendo de gran utilidad.

para arrancar la

para arrancar la StandBy:

STARTUP MOUNT
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;

por cierto... esto es la configuración basica. Una vez que te funciona, lo mejor es un pequeño tunning. Si añades MAX_CONNECTIONS=5 a la cadena del LOG_ARCHIVE_DEST_2 en las dos bases de datos notaras muuuucha mejora en el rendimiento :)

De momento no me va. El APP

De momento no me va. El APP se me queda a NO todo el rato, pero a ver si mañana lo hago funcionar.Por cierto, tu Data Guard es para el trabajo o lo has hecho por probarlo?. Yo lo estoy probando generándome dentro de la misma maquina 2 bases de datos.Crees que puede haber algun problema por eso?
Bueno, que pases una buena tarde :)
Mo.

Yo lo he montado como prueba

Yo lo he montado como prueba pero como parte de trabajo. Ahora mismo, sigo trasteando con el despues de unos problemas de red.

El que sean las dos BDD en la misma maquina puede que de algún error. Mira los puertos de los listeners y verifica que se ven entre ellos (que cada uno tenga las 2 BDD en el tnsnames). Revisa tambien las rutas, que no tengas algún lio con ellas.

Si tienes maquina de sobras, te recomendaria que utilizaras el VM-WARE para crearte una pequeña red. Puedes poner una BDD en la maquina fisica y la otra en una maquina virtual (o las dos en maquinas virtuales si tienes suficiente maquina y espacio).

Hola. Buenos días. ¿No crees

Hola.
Buenos días.
¿No crees que en el INIT.ora de la standby *.LOG_ARCHIVE_CONFIG='DG_CONFIG=(chicago,boston)' está mal y deberia ser *.LOG_ARCHIVE_CONFIG='DG_CONFIG=(boston,chicago)'?

No, es correcto así. Es la

No, es correcto así. Es la configuración que proporciona Oracle y la que estoy usando en la mia :P
Los ficheros INIT son exactamente iguales a los que estoy usando (reemplazando los SID), salvo por algún tuning o ajuste para los retardos.

Hola, cuando dices de hacer

Hola,
cuando dices de hacer el backup, ¿qué ficheros estás copiando exactamente? Todos los que se encuentran dentro de Oradata?
Muchas gracias.
Un saludo.

Basicamente eso... aunque

Basicamente eso... aunque depende de como lo tengas repartido.
Lo que hay que hacer baclup y preplicar a la StandBy son:
- Los DataBase File
- Los Control File
- Los Redo Online Log

Para evitar sorpresas

Para evitar sorpresas desagradables, siempre que hagas un backup en fío, tienes que hacer bakcup de los archivos listados en las siguientes vistas: v$datafile, v$controlfile y v$logfile

Salu2

OK,entonces, copio todos los

OK,entonces, copio todos los files:
*.DBF ->DataBase File,
*.CTL->Control File ,
*.LOG -> Redo Online Log
Pero, y si tengo ficheros para tablespaces, los copio tambien?

Gracias.

Eso son los DBF ;)

Eso son los DBF ;)

Muy interesante tu

Muy interesante tu artículo... en breve probaré a montar un Data Guard usando para ello dos máquinas virtuales sobre la misma máquina física.

Quería preguntarte un par de cosas: ¿qué ocurre si la primary cae? es decir... si hubiera algún problema con esa máquina, de disco, de corrupción de ficheros o lo que sea que provocara una caída de la base de datos ¿se "conectan" solos los usuarios a la standbye de forma transparente para seguir trabajando? No sé si habrás probado esto. Supongo que sería lo lógico, que en caso de caida de la primary actuara la standbye en su lugar y para restaurar la situación inicial, una vez resueltos los problemas en la primary, para las dos bases de datos, hacer una copia de seguridad de la standbye en la primary y arrancarlas de nuevo.

La otra pregunta es: ¿existe alguna forma de hacer el cambio de una por otra de forma controlada, algo así como un swich de base de datos? Por ejemplo... el sistema de réplica puede estar funcionando perfectamente pero en un momento dado podemos necesitar hacer alguna actualización de hardware en el equipo que contiene la primary (por ejemplo añadir módulos de memoria)... ¿existe una forma de decirle al sistema de replicación que los usuarios deben conectarse a la standbye?

Gracias de antemano.

Hola Loles, me alegro de que

Hola Loles, me alegro de que te guste el post...

En la configuración de aqui no hay nada sobre el FailSafe... es decir, si peta la primary, tendrias que levantar manualmente la StandBy como una BDD normal.
Si que hay un proceso para configurar esto de manera automatica, pero esa parte no he podido probarla todavia... (ahora estoy sin mis maquinas virtuales).

Lamento no poder ayudarte en este caso :(

Sí, supongo que sería

Sí, supongo que sería levantar manualmente la Standby y hacer algún cambio en la configuración de los clientes para que accedan a esta base de datos o mejor aún, cambiar directamente la IP de la Standbye por la de la Primary si las dos bases de datos tienen el mismo SID.

Después de montar el Data Guard tendré que investigar la manera automática de efectuar el cambio de base de datos... ya te contaré.

Gracias igualmente.

Te agradecería mucho que me

Te agradecería mucho que me contaras como te ha ido, yo ahora mismo no puedo ponerme con esto para ver como hacerlo :P

De todas maneras, según como sea la aplicación, tal vez sea suficiente con modificar el TNSNAMES del servidor en lugar de modificar todas las estaciones de trabajo.
Si usas un servidor de nombres, lo tienes todavía más fácil...

Muchas gracias y suerte :)

Tengo problemas con tu

Tengo problemas con tu tutorial, sigo todos los pasos y me da problemas al modificar el pfile y hacer que arranque, el error que me sale es el siguiente: ORA-00401: the value for parameter compatible is not supported by this release

tengo que usar tu version de oracle? ya que yo uso la 10.2.0.1.0

Te agradeceria mucho que me ayudes.

Logre corregir el error, pero

Logre corregir el error, pero no me sale la verificacion que haces al final....

como haces esto: En principio, genero unos nuevo CTLs con nombre distinto para que los use la StandBy. De esta manera te evitas sobreescribir.

Creo que tendrias que

Creo que tendrias que reemplazar los CTL (previa copia).
Piensa que los CTL son los que controlan o tienen informacion sobre los DBF, y si estos los reemplazas, salvo que sean exactamente iguales (cosa muy dificil) esos CTL no funcionarán bien.

Yo de ti reemplazaria los CTL de la STandBy por copias de la Primary, ademas del CTL propio que se crea para la StandBy.

Espero que te sea de ayuda....

Al ejecutar el comando SELECT

Al ejecutar el comando

SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

en la primary, me aparece

SEQUENCE# FIRST_TI NEXT_TIM
---------- -------- --------
2 11/07/09 11/07/09
2 11/07/09 11/07/09
3 11/07/09 11/07/09
3 11/07/09 11/07/09

y en la standby el comando

SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

SEQUENCE# APP
---------- ---
2 YES
3 YES

eso esta bien????

Si, es correcto. En la

Si, es correcto.

En la StansBy solo verás los archivers aplicados sobre si mismo, pero en la Primary verás tanto los propios como los de la StandBy.

Esto ademas sirve para controlar si los archivers se han replicado correctamente en todas la BDD conectandote solamente a una (la Primary).

Hola, estoy teniendo

Hola, estoy teniendo problemas al querer levantar la primary con el nuevo pfile modificado.

startup pfile='$ORACLE_HOME/dbs/initARIZONA.ora'
ORA-16024: parameter LOG_ARCHIVE_DEST_1 cannot be parsed

Te detallo como tengo el parametro en el pfile:
LOG_ARCHIVE_DEST_1='LOCATION=/u02/app/oracle/oradata/ARIZONA/archives VALID_FOR=(ALL_LOGFILES,ALL_ROLES)DB_UNIQUE_NAME=ARIZONA'

A mi me da que es el espacio

A mi me da que es el espacio que no hay entre separando el DB_UNIQUE_NAME del resto de la linea.
Por si las moscas, yo lo pondria con saltos de linea. De la siguiente manera:

LOG_ARCHIVE_DEST_1='LOCATION=/u02/app/oracle/oradata/ARIZONA/archives
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=ARIZONA'

Espero que así funcione :)

Muchas Gracias!, era eso,

Muchas Gracias!, era eso, ahora sigo con la instalacion, cualquier cosa te consulto....gracias nuevamente....

Hola nuevamente, bueno, las 2

Hola nuevamente, bueno, las 2 bases las puedo levantar OK, tanto la primary como la standby, el tema es que no esta aplicando los redo ya que al hacer el select en la vista V$ARCHIVED_LOG no me trae ninguna fila.
Las 2 instancias estan en el mismo sistema operativo, ya configure el tnsnames para las 2 instancias...chequee linea por linea los pfiles de las 2 bases....no se si me estoy comiendo algun paso.....

Recuerda que la Standby no se

Recuerda que la Standby no se levanta con un startup, sino con:
STARTUP MOUNT
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;

La has levantado así?

Si Si, a la primary la

Si Si, a la primary la levante normalmente, a la standby la levante en modo mount y le hice el alter DATABASE....
no se si el problema estara en que se encuentran las 2 bases en la misma VM...ahora estoy probando...de levantar una VM en mi notebook....pero no se si sera eso...
Ya que estoy te hago una consulta: cuando vos decis
"Partimos con que están las dos BDD creadas. La BDD StandBy tendría que ser una instalación completamente limpia, ya que eliminaremos el fichero de configuración, los DataFiles y los Control files".
te referis a que la base de datos standby, es una creacion estandard?? o yo puedo clonarla de la primary y despues usarla como standby???

Hombre, la verdad es que en

Hombre, la verdad es que en una misma máquina virtual no lo he probado...
Si que puede ser eso, en ese caso no te puedo ayudar porque no se por donde puede fallar :P
En principio, con modificar las rutas y nombres lo suficiente para ajustarlo de una instalación a otra tendría que ser suficiente.

Con la frase esa me refiero a que las dos BDD son instalaciones desde cero.
De todas formas, lo impórtate es que las dos BDD sean exactamente iguales, así que si de StandBy usas un clon de la Primary no hay problema.

Por cierto, el DataGuard solo funciona con instalaciones Enterprise.

Hola, te cuento, clone la

Hola, te cuento, clone la base primary en mi notebook, ambos SO son Suse Linux 10.1. Sigo sin poder hacer funcionar la replicacion, no me esta generando los archives log en el host de la standby.....ya configure los tnsnames y se ven cada una de las bases.....los archivos estan tal cual vos lo explicaste....pero no tengo forma, las 2 bases son Oracle enterprise 10.2.0.4...no se que puedo estar configurando mal.....la base Standby levanta con el archivo de control stdby.ctl .... pero no me aplica los switch de la primary en la standby.....lo hice paso a paso...y no hay forma....lo peor es que no me genera ningun error.....

Pues es raro.... Mira en el

Pues es raro....

Mira en el Alert de la Primary. Si no sale nada es que hay algo en el fichero de configuración que no esta bien.
Sin mas info no te puedo decir mas :P

Hola!, bueno ahora esta

Hola!, bueno ahora esta funcionando, solo que me esta dejando la columna APP en "NO"....el problema ahi esta en los pfiles?

En principio si... yo miraria

En principio si... yo miraria en el alert, a ver si te da alguna pista de que le esta pasando.

Hola! Estoy creando un data

Hola!

Estoy creando un data guard y segui tus pasos, pero al intentar levantar la base de datos standby con el ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT me marca error:
ORA-01665: control file is not a standby control file.
Me pueden ayudar?
Gracias.
Saludos.

Hola Mat, perdona que no te

Hola Mat, perdona que no te respondiera antes.

El error que te sale es porque no tienes el CTL correcto en la standby.

Recuerda que antes de copiar los CTL de la primary a la standby se ha de crear uno especifico en la primary para que la standby funcione correctamente.

Revisa los pasos, porque me parece que te has saltado uno.

Ya me diras si te ha funcionado.

Salud!

Saludos... En la parte de

Saludos...

En la parte de parametros para las bases en el init declaras varios DB_UNIQUE_NAME, eso es correcto? o para que se declaran varios?

Fijate bien que solo hay uno

Fijate bien que solo hay uno declarado.
El otro forma parte del valor asignado al parametro LOG_ARCHIVE_DEST_2.
Es decir:
DB_UNIQUE_NAME='chicago'
LOG_ARCHIVE_DEST_2='[...] DB_UNIQUE_NAME=boston'

Esto suele pasar con las comillas y los saltos de linea ;)

Genio, muy bueno el

Genio, muy bueno el posteo.
Consulta, la base Standby (secundaria), puede usarse como base de consulta?
Saludos

Enviar un comentario nuevo

El contenido de este campo se mantiene privado y no se mostrará públicamente.
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Etiquetas HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Saltos automáticos de líneas y de párrafos.

Más información sobre opciones de formato

Image CAPTCHA
Enter the characters shown in the image. Ignore spaces and be careful about upper and lower case.

Afiliados:


I Love Your Blog

Otorgado por:Darlantan

Inicio de sesión


Todo el contenido mostrado ha sido obtenido libremente por la red. Las marcas indicadas son propiedad de sus legítimos dueños y se muestran a modo informativo de manera libre y voluntaria, sin intención publicitaria ni ánimo de lucro. Todo el material propio, y salvo que se indique lo contrario, se encuentra bajo licencia Creative Commons. Si tienes el Copyright de algún contenido o has detectado algna anomalia, por favor, infórmalo al correo undomain@gmail.com para ser corregido cuanto antes. El autor de esta Web no se hace responsable del contenido de terceras personas y de sites ajenos a este.

Powered by Drupal, an open source content management system