jueves, 6 de noviembre de 2008

¿Cómo renombrar con Rman datafiles nombrados con caracteres especiales?

Faltaba espacio en un tablespace y optaste por agregar un datafile nuevo, resuelto el problema regresas a tus asuntos y te olvidas del tema. Luego, mientras de forma rutinaria inspeccionas los contenidos del filesystem, reparas en que el nuevo datafile tiene un nombre algo raro, tiene caracteres especiales, recuerdas que al escribir el nombre lo hiciste con tanta prisa que te equivocaste un par de veces pero al final el nombre estaba OK, o al menos en tu pantalla así parecía; bueno pues, igual hay que resolver el problema, pero ¿por dónde empezar?

La primera intención es renombrar el archivo desde el sistema operativo, pero encuentras problemas para lograrlo, ¿por qué no ayudarnos de nuestro viejo conocido Rman? Afortunadamente el procedimiento es bastante simple:
  1. Primero invocamos Rman y verificamos la situación inicial.
    $ rman target /
    RMAN> report schema;
    
    using target database control file instead of recovery catalog
    Report of database schema
    
    List of Permanent Datafiles
    ===========================
    File Size(MB) Tablespace       RB segs Datafile Name
    ---- -------- ---------------- ------- ------------------------
    1    480      SYSTEM           ***     /u01/oradata/orcl/system01.dbf
    2    30       UNDOTBS1         ***     /u01/oradata/orcl/undotbs01.dbf
    3    230      SYSAUX           ***     /u01/oradata/orcl/sysaux01.dbf
    4    5        USERS            ***     /u01/oradata/orcl/users01.dbf
    5    100      EXAMPLE          ***     /u01/oradata/orcl/example01.dbf
    6    10       DEMO             ***     /u01/oradata/orcl/�¡Ã³demo01.dbf
    
    List of Temporary Files
    =======================
    File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
    ---- -------- -------------------- ----------- --------------------
    1    20       TEMP                 32767       /u01/oradata/orcl/temp01.dbf
  2. Procedemos a poner el tablespace afectado fuera de linea.
    RMAN> sql "alter tablespace demo offline";
  3. Obtenemos una copia del datafile, referenciándolo por su file#.
    RMAN> copy datafile 6 to '/u01/oradata/orcl/demo01.dbf';
    
    Starting backup at 06/11/2008 20:40:28
    allocated channel: ORA_DISK_1
    channel ORA_DISK_1: sid=142 devtype=DISK
    channel ORA_DISK_1: starting datafile copy
    input datafile fno=00006 name=/u01/oradata/orcl/�¡Ã³demo01.dbf
    output filename=/u01/oradata/orcl/demo01.dbf tag=TAG20081106T204029 recid=4 stamp=670106430
    channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
    Finished backup at 06/11/2008 20:40:30
    
  4. Ahora intercambiamos los archivos.
    RMAN> switch datafile 6 to copy;
    
    datafile 6 switched to datafile copy "/u01/oradata/orcl/demo01.dbf"
    
  5. Finalizamos poniendo el tablespace en linea.
    RMAN> sql "alter tablespace demo online";
    
    sql statement: alter tablespace demo online
    
  6. Verificamos.
    RMAN> report schema;
    
    using target database control file instead of recovery catalog
    Report of database schema
    
    List of Permanent Datafiles
    ===========================
    File Size(MB) Tablespace       RB segs Datafile Name
    ---- -------- ---------------- ------- ------------------------
    1    480      SYSTEM           ***     /u01/oradata/orcl/system01.dbf
    2    30       UNDOTBS1         ***     /u01/oradata/orcl/undotbs01.dbf
    3    230      SYSAUX           ***     /u01/oradata/orcl/sysaux01.dbf
    4    5        USERS            ***     /u01/oradata/orcl/users01.dbf
    5    100      EXAMPLE          ***     /u01/oradata/orcl/example01.dbf
    6    10       DEMO             ***     /u01/oradata/orcl/demo01.dbf
    List of Temporary Files
    =======================
    File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
    ---- -------- -------------------- ----------- --------------------
    1    20       TEMP                 32767       /u01/oradata/orcl/temp01.dbf

El problema ha sido resuelto!

Puedes revisar el Note:743616.1 Rename Datafiles Using Rman, para ver otros escenarios posibles.

Posts Relacionados:

¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues déjame tus comentarios o envíame un email y para que NO te pierdas ningún Post, suscríbete por email ahora mismo!

3 comentarios, agrega el tuyo!

Jorge dijo...

Gracias por esta interesante nota, una consulta, cuando haces el "switch" del datafile a "copy", ¿como sabe a cual estructura esta haciendo el switch?

Enrique Orbegozo dijo...

Hola Jorge, tal como la documentación lo explica, to copy especifica que se desea renombrar el datafile para que referencie al último backup tipo copy. Oracle registra en el controlfile todos los backups que realices con RMAN por lo que le es fácil identificar lo que necesita. Si deseas que se renombre a una copia previa existe tambien una sintaxis que lo permite: to datafilecopy 'filename'.

Gracias por participar!

karina dijo...

Kike tengo una consulta sobre rman, mira tengo una db de 1Tb y quiero mover esta db desde el site 1 la site 2.
En ambos sites manejan librerias independientes para TSM, queria hacer un backup via rman y las cintas recuperarlas en el site 2 pero me indican que no es factible ya que al hacer la recuperacion debe de apuntar al mismo catalogo de TSM desde donde se realizo el backup, me indicaron que talvez podia usar una drive /dev/rmt0 para hacer dicho backup, pero este backup es online por lo q tampoco puede hacerse de esa forma.

La pregunta es como podria hacer un backup via rman en cintas que luego pueda trasladar al site 2 y recuperarlas , existe alguna alternativa para poder aplicar esta solucion?, sin depender de un catalogo de TSM.

Gracias por tu aporte