Script que genera Script de reubicación de datafiles y redolog files

gravatar
Compartir este post:
  • Google Buzz
  • Google Reader
  • Identi.ca
  • Meneame
  • PDF
  • Print
  • Twitter
  • Facebook
  • email
  • LinkedIn

Frecuentemente el dba oracle debe cambiar la ubicación de la base de datos, ya sea por mantención, o por una migración a una nueva plataforma. La técnica para realizar esto es montar la base de datos con el archivo de control ya ubicado en su posición final, e informarle al archivo de control sobre la nueva ubicación que tienen los datafiles (V$DATAFILE) y redolog files (V$LOGFILE). Se debe recordar que el archivo de control es el que guarda la metadata de estructura física de la base de datos. Esto se hace con el siguiente comando:

SQL> ALTER DATABASE RENAME FILE ‘/u01/app/oracle/oradata/sirio/system01.dbf’ TO ‘/u02/oradata/sirio/system01.dbf’ ;

Donde ‘/u01/app/oracle/oradata/sirio/system01.dbf’ es el nombre original del archivo y ‘/u02/oradata/sirio/system01.dbf’ es el nuevo nombre y ubicación del archivo.

Lo anterior se debe hacer para cada uno de los datafiles y redolog files que existan en la base de datos. Si son muchos la tarea de generar el script puede ser titánica, y la posibilidad de errores aumenta.

Con la instancia abajo previamente se mueven todos los archivos desde la ubicación original a la nueva ubicación. En el caso del ejemplo, suponiendo que toda la base de datos original se encuentra en /u01/app/oracle/oradata/sirio/ y la nueva ubicación es /u02/oracle/oradata/sirio, entonces a nivel de Sistema Operativo (Linux) se hace lo siguiente:

$ mv /u01/app/oracle/oradata/sirio/*   /u02/oradata/sirio/

A continuación se presenta un ejemplo de una consulta que genera el script que permite ejecutar la reubicación en forma mucho más fácil. Primero se conecta a la consola de administración:

$sqlplus / as sysdba

SQL> startup mount

set pagesize 0
set linesize 2000
set feedback off
set echo off
spool mueve.sql
Rem
Rem    Crea Comandos SQL para alterar el nombre y la ruta de los archivos de la base de datos
Rem    El destino está en duro ( /u02/oradata/sirio/ ), los usuarios pueden alterar este destino a su necesidad
Rem
Rem    AUTOR: FELIPE MANRIQUEZ (www.neuronet.cl)
Rem
Rem    Permitida su reproducción referenciando al autor
Rem
Rem
SELECT columna1 FROM
(select ‘ ALTER DATABASE RENAME FILE ‘||””||name||””||’ TO ‘||””|| ‘/u02/oradata/sirio/’||
substr(name, instr(name, ‘/’,-1,1) +1, length(name) )||””||’ ;’||chr(10) columna1,
1 columna2
from v$datafile
UNION
select ‘ ALTER DATABASE RENAME FILE ‘||””||member||””||’ TO ‘||””|| ‘/u02/oradata/sirio/’||
substr(member, instr(member, ‘/’,-1,1) +1, length(member) )||””||’ ;’||chr(10) , 2
from v$logfile)
ORDER BY columna2
/
spool off

SQL> REM ver versión ASCII del comando anterior haciendo click en  genera_mueve

SQL> spool off

finalmente se revisa el script, y se ejecuta .

SQL> @mueve.sql

Se comprueba que todo esté OK pasando dela base montada a base de datos abierta

SQL> ALTER DATABASE OPEN;

Si no hay errores, significa que todos los archivos se cambiaron de nombre correctamente

FIN

Etiquetas: , , , ,

Escrito por: Felipe Manriquez

Esta entrada se publicó , el Domingo, 29 de marzo de 2009 a las 10:13 am horas y está guardada bajo Uncategorized. Puedes seguir cualquier respuesta a esta entrada mediante la fuente RSS 2.0. Puedes dejar un comentario o enviar un trackback desde tu propio sitio.

5 comentarios para “Script que genera Script de reubicación de datafiles y redolog files”

  1. Alejandro dice:

    Felipe, como me hago miembro del blog?
    salu2,
    A

  2. bastian gutierrez dice:

    Don Felipe, se que mi consulta no va en este tema pero me asalta una duda.

    cuando intento cargar datos desde un texto plano con sql*loader no se donde debo colocar el archivo de control, es válido colocar el directorio en que se encuentra al momento de ejecutar elcomando?

    si es posible en algun momento poder redactar algun post referente a este tema seria ahun mejor, gracias

  3. Felipe Manriquez dice:

    Estimado Bastian

    El archivo de control del SQLLOADER lo puedes ubicar en cualquier parte, en particular en el directorio desde donde ejecutas el comando. En este caso no tienes que especificar el full path name del archivo. En cualquier otro caso debes especificar el full path name del archivo.

    Por orden debieras tener un directorio llamado cargas y dentro de este directorio puedes tener un subdirectorio llamado ctl donde puedes ubicar todos los archivos de control, otro directorio llamado flatfiles, donde guardes los archivos planos a cargar, y asi sucesivamente con los reject files, bad files, log files.

    Suerte

    Felipe

  4. bastian gutierrez dice:

    aaaaa ya entendí, muchas gracias, el enredo que tenia es que estaba realizando el sqlloader desde el sqlplus, pero cuando mencionó “directorio desde donde ejecutas el comando” me di cuenta que estaba errado y era desde la consola, tomaré en cuenta la buena práctica de crear un directorio para las cargas y sus correspondientes subdirectorios

    Se le agradece enormemente

    Bastián.-

  5. Aldo dice:

    Cordial Saludos,

    Soy novato, pero entiendo rapido

    tengo un problema que al paracer no tengo enpacio en la particion para crear o redimensionar unos datafile, tengo otras particiones las cuales si tienen espacios que puedo hacer gracias

Deja un comentario