viernes, 23 de diciembre de 2011

Mover los control files y log en una base de datos Oracle sobre solaris.



Nos conectamos al servidor mediante una sesión de terminal con SSh Secure Shell. Por lo general y por razones de seguridad algunos servidores no permiten loguearse directamente con el usuario root, por tal razón, procederemos a loguearnos con un usuario sin privilegios y  luego elevaremos al usuario root.

#su –

Luego pasamos al usuario oracle para realizar las labores de mantenimiento.

#su oracle

Hacemos un export de la dirección de la base de datos lo mismo que SID.

#ORACLE_HOME=directorio de instalacion bd
#ORACLE_SID=nombrebd
#export $ORACLE_HOME
#export $ORACLE_SID

En caso que no se haya modificado el PATH para que busque los comandos antes de ejecutarlos en el $ORACLE_HOME/bin  debemos ubicarnos en el directorio bin de la base de datos.

#cd $ORACLE_HOME/bin

Nos conectamos a la base de datos como sysdba y procedemos a bajar la base de datos.

#./sqlplus /nolog
SQL>connect / as sysdba
SQL> shutdown immediate


Verificamos en que forma inicia la base de datos con:

SQL> SELECT DECODE( hay , 0, 'init.ora','spfile.ora') "Arranque" FROM (SELECT count(*) hay FROM V$SPPARAMETER WHERE ISSPECIFIED = 'TRUE');

Arranque
----------
spfile.ora





En este caso el motor de base de datos inicia con un spfile.ora, por lo que deberemos cambiar la posición de los archivos de control modificando los parámetros que arroja la vista

SQL> show parameter control_file;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time        integer     7
control_files                        string      /u02/oradata/sinu/control01.ctl

ó

SQL> select name from v$controlfile;

NAME
--------------------------------------------------------------------------------
/u02/oradata/sinu/control01.ctl


Procedemos a cambiar el parámetro Control_file  usando el comando ALTER SYSTEM así:


SQL>ALTER SYSTEM SET control_files=’ /test/control01.ctl’  SCOPE=SPFILE;
Nota: usar comilla sencilla.

En otra ventana de terminal, y una vez abajo la base de datos, procedemos a copiar los Database Files y demás archivos dentro del FileFystem a donde finalmente queremos dejarlos.

Copiar los archivos físicamente a la ubicación de destino.


-rw-r-----   1 oracle   oinstall 7847936 Dec 20 15:15 control01.ctl
-rw-r-----   1 oracle   oinstall 52429312 Dec 19 22:01 redo01.log
-rw-r-----   1 oracle   oinstall 52429312 Dec 20 04:00 redo02.log
-rw-r-----   1 oracle   oinstall 52429312 Dec 20 15:15 redo03.log
-rw-r-----   1 oracle   oinstall 104858112 Dec 19 16:05 redo4.log
-rw-r-----   1 oracle   oinstall 2147491840 Dec 20 04:30 sinu_auditoria_00.dbf
-rw-r-----   1 oracle   oinstall 1073750016 Dec 20 04:30 sinu_auditoria_01.dbf
-rw-r-----   1 oracle   oinstall 1048584192 Dec 20 04:30 sinu_auditoria_02.dbf
-rw-r-----   1 oracle   oinstall 1048584192 Dec 20 12:00 sinu_auditoria_03.dbf
-rw-r-----   1 oracle   oinstall 3221233664 Dec 20 15:14 sinu_datos_00.dbf
-rw-r-----   1 oracle   oinstall 3221233664 Dec 20 15:14 sinu_datos_01.dbf
-rw-r-----   1 oracle   oinstall 1038098432 Dec 20 15:14 sinu_datos_02.dbf
-rw-r-----   1 oracle   oinstall 1073750016 Dec 20 15:15 sinu_datos_03.dbf
-rw-r-----   1 oracle   oinstall 3221233664 Dec 20 15:14 sinu_index_00.dbf
-rw-r-----   1 oracle   oinstall 1811947520 Dec 20 15:14 sinu_index_01.dbf
-rw-r-----   1 oracle   oinstall 524296192 Dec 20 04:30 sinu_paralelo_00.dbf
-rw-r-----   1 oracle   oinstall 1572872192 Dec 20 15:14 sinu_temp_00.dbf
-rw-r-----   1 oracle   oinstall 536879104 Jun 21  2011 sinu_temp_01.dbf
-rw-r-----   1 oracle   oinstall 536879104 Dec 20 15:13 sinu_temp_02.dbf
-rw-r-----   1 oracle   oinstall 209723392 Feb 27  2010 sinu_temp_des_00.dbf
-rw-r-----   1 oracle   oinstall 744497152 Dec 20 15:11 sysaux01.dbf
-rw-r-----   1 oracle   oinstall 503324672 Dec 20 15:05 system01.dbf
-rw-r-----   1 oracle   oinstall 524296192 Dec 20 15:11 system02.dbf
-rw-r-----   1 oracle   oinstall 524296192 Dec 20 15:14 tbs_stat_00.dbf
-rw-r-----   1 oracle   oinstall 489693184 Dec 19 22:01 temp01.dbf
-rw-r-----   1 oracle   oinstall 141565952 Dec 20 15:11 undotbs01.dbf
-rw-r-----   1 oracle   oinstall 524296192 Dec 20 15:14 undotbs02.dbf
-rw-r-----   1 oracle   oinstall 5251072 Dec 20 04:30 users01.dbf

Para generar el Script de las sentencias para mover los archivos usen esto:



SELECT columna1 FROM
(select '  ALTER DATABASE RENAME FILE '||''''||name||''''||' TO '||''''||
'/u02/origen/sirio/'|| substr(name,
 instr(name, '/',-1,1) +1,
 length(name) )||''''||' ;'  columna1, 1  columna2  from v$datafile
UNION
select '  ALTER DATABASE RENAME FILE '||''''||member||''''||' TO '||''''||
'/u02/Destino/sirio/'|| substr(member,
 instr(member, '/',-1,1) +1,
 length(member) )||''''||' ;' , 2  from v$logfile)
ORDER BY columna2


Luego montamos la base de datos
SQL> connect /as sysdba
SQL> startup mount

Ejecutamos los siguientes comandos que le dirán a la base de datos la nueva ubicación de los dbf y los redo log.

  ALTER DATABASE RENAME FILE '/test/sinu/sinu_auditoria_04.dbf' TO '/test/sinu_auditoria_04.dbf' ;
  ALTER DATABASE RENAME FILE '/u02/oradata/sinu/sinu_datos_02.dbf' TO '/test/sinu_datos_02.dbf' ;
  ALTER DATABASE RENAME FILE '/u02/oradata/sinu/undotbs02.dbf' TO '/test/undotbs02.dbf' ;
  ALTER DATABASE RENAME FILE '/u02/oradata/sinu/undotbs01.dbf' TO '/test/undotbs01.dbf' ;
  ALTER DATABASE RENAME FILE '/u02/oradata/sinu/tbs_stat_00.dbf' TO '/test/tbs_stat_00.dbf' ;
  ALTER DATABASE RENAME FILE '/u02/oradata/sinu/sinu_auditoria_00.dbf' TO '/test/sinu_auditoria_00.dbf' ;
  ALTER DATABASE RENAME FILE '/u02/oradata/sinu/sinu_auditoria_01.dbf' TO '/test/sinu_auditoria_01.dbf' ;
  ALTER DATABASE RENAME FILE '/u02/oradata/sinu/sinu_auditoria_02.dbf' TO '/test/sinu_auditoria_02.dbf' ;
  ALTER DATABASE RENAME FILE '/u02/oradata/sinu/sinu_auditoria_03.dbf' TO '/test/sinu_auditoria_03.dbf' ;
  ALTER DATABASE RENAME FILE '/u02/oradata/sinu/sinu_datos_00.dbf' TO '/test/sinu_datos_00.dbf' ;
  ALTER DATABASE RENAME FILE '/u02/oradata/sinu/sinu_datos_01.dbf' TO '/test/sinu_datos_01.dbf' ;
  ALTER DATABASE RENAME FILE '/u02/oradata/sinu/users01.dbf' TO '/test/users01.dbf' ;
  ALTER DATABASE RENAME FILE '/u02/oradata/sinu/sinu_datos_03.dbf' TO '/test/sinu_datos_03.dbf' ;
  ALTER DATABASE RENAME FILE '/u02/oradata/sinu/sinu_index_00.dbf' TO '/test/sinu_index_00.dbf' ;
  ALTER DATABASE RENAME FILE '/u02/oradata/sinu/sinu_index_01.dbf' TO '/test/sinu_index_01.dbf' ;
  ALTER DATABASE RENAME FILE '/u02/oradata/sinu/sinu_paralelo_00.dbf' TO '/test/sinu_paralelo_00.dbf' ;
  ALTER DATABASE RENAME FILE '/u02/oradata/sinu/sysaux01.dbf' TO '/test/sysaux01.dbf' ;
  ALTER DATABASE RENAME FILE '/u02/oradata/sinu/system01.dbf' TO '/test/system01.dbf' ;
  ALTER DATABASE RENAME FILE '/u02/oradata/sinu/system02.dbf' TO '/test/system02.dbf' ;
  ALTER DATABASE RENAME FILE '/u02/oradata/sinu/redo4.log' TO '/test/redo4.log' ;
  ALTER DATABASE RENAME FILE '/u02/oradata/sinu/redo03.log' TO '/test/redo03.log' ;
  ALTER DATABASE RENAME FILE '/u02/oradata/sinu/redo02.log' TO '/test/redo02.log' ;
  ALTER DATABASE RENAME FILE '/u02/oradata/sinu/redo01.log' TO '/test/redo01.log' ;

Una vez finalizado este procedimiento iniciamos la base de datos para que pueda recibir conexiones y salimos.
SQL> ALTER DATABASE OPEN
SQL> exit

Si por alguna razón la instancia de la base de datos no corre correctamente o muestra algún error al iniciar, podemos ver dentro del log en:

#cd $ORACLE_HOME/admin/orcl/bdump
Allí encontraremos un log que por lo general es llamado alert_<$ORACLE_SID>.log, en él se podrían encontrar alguna información de los problemas encontrados y de la forma en como solucionarlos.



Reacciones:

0 comentarios:

Publicar un comentario

Deja tu comentario aqui: