Restart RMAN Duplicate RAC/ASM to Single Instance/ASM

Recientemente he tenido la oportunidad de realizar un servicio de unos dias de refresco de entorno con RMAN.

La base de datos origen esta en RAC 10gR2 de dos nodos sobre ASM y ocupa 2TB. El objetivo es refrescar entorno de QA periodicamente, un par de veces al mes con datos de produccion, QA es un Single Instance con ASM.

Si no recuerdo mal Oracle 9i se introdujo la funcionalidad Restore Optimization, esta funcionalidad permite rearrancar un restore fallido sin tener que restaurar todos los datafiles (esquiva los que ya estan restaurados), muy util cuando tienes que restaurar un tamaño considerable y por cualquier error falla. El caso es que esta funcionalidad no funciona con ASM o mejor dicho Oracle Managed Files (ASM funciona con OMF) porque los nombre de los datafiles son autogenerados, cada vez que se ejecuta un restore siempre genera un nombre nuevo y esto impide que se detecte datafiles que ya estan restaurados y provoca duplicados de datafiles y sobre todo perdida de tiempo. Esto es por el bug 5683952 (pone fixed in 10.2.0.2 pero me parece que no es verdad).

El workaround es forzar los nombre de los datafiles que sean user managed files especificando set newname en el duplicate, esto generara un nombre estatico que a su vez se convierten en alias de ASM que apunta a los datafiles, por ejemplo

SET NEWNAME FOR DATAFILE 1 TO ‘+DG_DATA/BST/system01.dbf’;

+DG_DATA/BST/system01.dbf apunta a +DG_DATA/BST/datafile/system.262.688916473

Pero a nivel de diccionario de datos apunta a +DG_DATA/BST/system01.dbf y esto habilita Restore Optimization.

Por cierto hace poco escribi sobre backup de RMAN a discos de SATA que tiene un throughput de 20MB, en este caso el backup iba a cinta…. a una media de 100MB por segundo, flipo con la velocidad de los discos de SATA (ó los que cofniguran la cabina). Me inclino mas a segundo porque tengo discos SATA en mi PC y un RAID 0 de dos discos de 320GB da mucho mejor rendimiento…. No entiendo mucho de cintas pero creo que no hace falta ser un experto para saber que algo no esta bien🙂

9 thoughts on “Restart RMAN Duplicate RAC/ASM to Single Instance/ASM

  1. Pingback: Restart RMAN Duplicate RAC/ASM to Single Instance/ASM - DbRunas

  2. john

    Hola Li-Shang, nunca te escribo y hoy dos veces en 30 minutos🙂.

    No he probado lo que dices (ahora no tengo clientes con ASM, y lo casero no sería buena prueba), pero una pregunta ¿Probaste usar los alias de los ficheros ASM? Igual estoy diciendo una tontería, porque no tengo todos los detalles de lo que hiciste, pero con mkalias de asmcmd “creo” que es lo mismo, al final están en V$ASM_ALIAS. Hay un ejemplo en utilities:

    ASMCMD> mkalias ‘+DG_DATA/BST/system01.454.555341961’ ‘+DG_DATA/BST/system01.dbf’

    Si no lo has probado, y lo quieres probar, me cuentas a ver si realmente funciona. Yo no tengo donde😦. Y si ya lo has probado y no funciona, pues nada, te agradecería que me lo dijeras.

    Un saludo

    John Ospino Rivas

    Reply
  3. lscheng Post author

    Hola John

    No entiendo muy bien lo de mkalias.

    Esto es lo que ejecutaba a princpio (hay menos datafiles en este caso para simplificar pero realmente habia 180 datafiles):

    RUN {
    ALLOCATE AUXILIARY CHANNEL T1 DEVICE TYPE DISK;
    SET UNTIL SCN 536418;
    DUPLICATE TARGET DATABASE TO BST
    LOGFILE
    GROUP 1 (‘+DG_DATA/bst/redo01.dbf’) SIZE 50M,
    GROUP 2 (‘+DG_DATA/bst/redo02.dbf’) SIZE 50M,
    GROUP 3 (‘+DG_DATA/bst/redo03.dbf’) SIZE 50M;
    }

    Si este duplicate falla por quedar sin espacio si ejecutas otra vez los comandos de arriba el RMAN volvera a restaurar de cero.

    Sin embargo si usas el siguiente comando:

    RUN {
    ALLOCATE AUXILIARY CHANNEL T1 DEVICE TYPE DISK;
    SET UNTIL SCN 536418;
    SET NEWNAME FOR DATAFILE 1 TO ‘+DG_DATA/BST/system01.dbf’;
    SET NEWNAME FOR DATAFILE 2 TO ‘+DG_DATA/BST/undotbs101.dbf’;
    SET NEWNAME FOR DATAFILE 3 TO ‘+DG_DATA/BST/sysaux01.dbf’;
    SET NEWNAME FOR DATAFILE 4 TO ‘+DG_DATA/BST/undotbs201.dbf’;
    SET NEWNAME FOR DATAFILE 5 TO ‘+DG_DATA/BST/users01.dbf’;
    SET NEWNAME FOR TEMPFILE 1 TO ‘+DG_DATA/BST/temp01.dbf’;
    DUPLICATE TARGET DATABASE TO BST
    LOGFILE
    GROUP 1 (‘+DG_DATA/bst/redo01.dbf’) SIZE 50M,
    GROUP 2 (‘+DG_DATA/bst/redo02.dbf’) SIZE 50M,
    GROUP 3 (‘+DG_DATA/bst/redo03.dbf’) SIZE 50M;
    }

    RMAN detecta los duplicados y salta cuando ve que esta restaurado por ejemplo system01.dbf.

    En que paso crees que deberia de poner el mkalias😕 En el segundo reintento?

    Un saludo


    LSC

    Reply
  4. john

    Hola Li,

    He leido que los “alias” dan algo de problemas. Pero bueno, pienso que falló y como de antemano sabes que puede pasar en ASM que no use el optimizador, pues después que falló, sería algo así como:

    $> asmcmd
    ascmd> cd “+DG_DATA/BST/”
    asmcmd> mkalias system.262.688916473 system.dbf

    asmcmd> mkalias users01.757.75757575 users01.dbf

    bueno un poco tedioso, pero con un vi y v$datafile se hace más sencillo. Y despues volver a lanzar :

    RUN {
    ALLOCATE AUXILIARY CHANNEL T1 DEVICE TYPE DISK;
    SET UNTIL SCN 536418;
    DUPLICATE TARGET DATABASE TO BST
    LOGFILE
    GROUP 1 (’+DG_DATA/bst/redo01.dbf’) SIZE 50M,
    GROUP 2 (’+DG_DATA/bst/redo02.dbf’) SIZE 50M,
    GROUP 3 (’+DG_DATA/bst/redo03.dbf’) SIZE 50M;
    }

    No se si realmente RMAN se de cuenta de estos alias, por eso si tienes la oportunidad y lo puedes probar te lo agradecería, y además quería saber si lo habías hecho alguna vez😀.
    Nada, era solo una idea, y por probar cosas.

    Reply
  5. lscheng Post author

    Eso no funciona tio, si no especificas un nombre que nos gusta (oseas user managed) en el segundo duplicate volverá a generar otro nombre que le da la gana como system.xxx.yyyyyyyyyyyyy. El alias que has creado se lo pasa por el forro a no ser (que no he probado) en el segundo duplicate le pones set newname a los datafiles (y de lo cuales has creado alias) que se ha restaurado en el primer intento para que vea que ya existe un fichero con ese nombre y pasa de restaurar.

    Pero para hacer eso pongo set newname desde principio🙂

    Reply
  6. john

    OK, si se los pasa por el forro, pues nada. SET NEWNAME. Quería saber justo eso, si RMAN lo tiene en cuenta o no y si dices que no, pues no. Un saludo

    Reply
  7. Richard

    Hola Li
    Tengo una pregunta que hacerte referente a un caso en particular, veras, efectuo respaldos cada semana de una base de datos en oracle 10G sin asm, en esta ultima semana tuve un incidente con la base de datos y necesitaba recuperar el system.dbf, el respaldo lo tenia con rman integrado con una solucion de respaldos de EMC el Networker, cuando efectue el restore del system.dbf, el rman me arrojaba un error que no encontraba el system.dbf. El procedimiento de restore se efectua directamente desde rman. Ahora mi pregunta es, es posible recuperar directamente en mi entorno de produccion el system.dbf desde el rman, teniendo la base de datos detenida? o se debe de seguir algun procedimiento en especial?

    Gracias por ayudarnos en nuestras consultas.

    Atte.

    Richard

    Reply
  8. Richard

    RMAN> run
    {
    allocate channel t1 type ‘SBT_TAPE’;
    send ‘NSR_ENV=(NSR_SERVER=prd21)’;
    restore datafile ‘/local/oradata01/prdsia01/system/system01.dbf’;
    }2> 3> 4> 5> 6>

    allocated channel: t1
    channel t1: sid=13 devtype=SBT_TAPE
    channel t1: NMO v4.2.0.0

    sent command to channel: t1

    Starting restore at 17-APR-10

    channel t1: starting datafile backupset restore
    channel t1: specifying datafile(s) to restore from backup set
    restoring datafile 00001 to /local/oradata01/prdsia01/system/system01.dbf
    released channel: t1
    RMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-03002: failure of restore command at 04/17/2010 19:55:30
    ORA-19507: failed to retrieve sequential file, handle=”/df_PRDSIA01_1_49619_716056937/”, parms=””
    ORA-27029: skgfrtrv: sbtrestore returned error
    ORA-19511: Error received from media manager layer, error text:
    The function mm_retrieve() failed with the error: RPC receive operation failed.
    A network connection could not be established with the host. (1:5:0)

    Reply
  9. Richard

    Aqui efectuo el mismo restore de un dbf y si funciona

    RMAN> run
    {
    allocate channel t1 type ‘SBT_TAPE’;
    send ‘NSR_ENV=(NSR_SERVER=prd21)’;
    restore datafile ‘/local/oradata01/prdsia01/example/example01.dbf’;
    }2> 3> 4> 5> 6>

    allocated channel: t1
    channel t1: sid=13 devtype=SBT_TAPE
    channel t1: NMO v4.2.0.0

    sent command to channel: t1

    Starting restore at 17-APR-10

    skipping datafile 4; already restored to file /local/oradata01/prdsia01/example/example01.dbf
    restore not done; all files readonly, offline, or already restored
    Finished restore at 17-APR-10
    released channel: t1

    RMAN>

    Reply

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s