« Oracle 12c New Features : Exportar una vista como tabla (expdp)Oracle 12c New Features : Último login en SqlPlus »

Oracle 12c New Features : Movimiento de datafiles ONLINE



En Oracle 11gr2 y versiones más antiguas de Oracle para poder mover un datafile de ubicación , teníamos que dejar el datafile OFFLINE, copiar por sistema operativo o RMAN y hacer un ALTER DATABASE RENAME.

Pues bien , una nueva característica en Oracle 12c, nos permite realizar este movimiento en línea sin que nuestros aplicativos tengan que sufrir una pérdida de servicios.



El formato del comando

ALTER DATABASE MOVE DATAFILE 'origen' to 'destino';

He aquí un ejemplo :

1.- Chequeo mis datafiles, su status y el tamaño (Puede apreciarse que no es instancia productiva :) )

FILE_NAME                                                   ;STATUS   ;        GB
------------------------------------------------------------;---------;----------
C:\APP\INMETRICS-HECTOR\ORADATA\PROD\UNDOTBS01.DBF          ;AVAILABLE;,708007813
C:\APP\INMETRICS-HECTOR\ORADATA\PROD\SYSAUX01.DBF           ;AVAILABLE;,693359375
C:\APP\INMETRICS-HECTOR\ORADATA\PROD\SYSTEM01.DBF           ;AVAILABLE; ,76171875
C:\APP\INMETRICS-HECTOR\ORADATA\PROD\USERNEW01.DBF          ;AVAILABLE;,004882813
C:\APP\INMETRICS-HECTOR\ORADATA\PROD\EXAMPLE.DBF            ;AVAILABLE;         1


2.- Ejecuto el comando para realizar el movimiento

16:58:00 SQL> alter database move datafile 2 to 'c:\app\inmetrics-hector\oradata\prod\examplenew011.dbf';

Database altered.

Elapsed: 00:01:27.73

Muestro los tiempos sólo para tener una idea y proyectar algún movimiento a futuro, 1GB en 1,5 minutos app


3.- Vuelvo a consultar mis datafiles y realmente aparece el nuevo datafile y mientras se hacía el movimiento , se puede consultar la tabla y los aplicativos sin problemas.

FILE_NAME                                                   ;STATUS   ;        GB
------------------------------------------------------------;---------;----------
C:\APP\INMETRICS-HECTOR\ORADATA\PROD\UNDOTBS01.DBF          ;AVAILABLE;,708007813
C:\APP\INMETRICS-HECTOR\ORADATA\PROD\SYSAUX01.DBF           ;AVAILABLE;,693359375
C:\APP\INMETRICS-HECTOR\ORADATA\PROD\SYSTEM01.DBF           ;AVAILABLE; ,76171875
C:\APP\INMETRICS-HECTOR\ORADATA\PROD\USERNEW01.DBF          ;AVAILABLE;,004882813
C:\APP\INMETRICS-HECTOR\ORADATA\PROD\EXAMPLENEW01.DBF       ;AVAILABLE;         1


Si quisiera hacer un movimiento de un datafile que se encuentre en modo OFFLINE, daría un error como el que sigue

23:12:55 ORACLE> alter database move datafile 2 to 'c:\app\inmetrics-hector\oradata\prod\examplenew01.dbf';
alter database move datafile 2 to 'c:\app\inmetrics-hector\oradata\prod\examplenew01.dbf'
*
ERROR at line 1:
ORA-01135: el archivo 2 accedido para LMD/consulta está offline
ORA-01110: archivo de datos 2: 'C:\APP\INMETRICS-HECTOR\ORADATA\PROD\EXAMPLE.DBF'

Elapsed: 00:00:00.15


Algunas consideraciones y observaciones a tener en cuenta :

- Este comando es extremadamente útil para realizar el movimiento de un datafile desde un storage a otro

- Con este comando se puede un datafile desde Filesystem a ASM y viceversa

- Al momento de ejecutar el comando , Oracle genera una copia del datafile en la nueva ruta o con el nuevo nombre que se le indica, una vez completada la instrucción se borra el datafile antiguo, sólo en ambiente Windows el datafile antiguo se deja y se debe eliminar en forma manual

- Se debe considerar el mismo espacio libre que el datafile que se está queriendo mover, dado que Oracle generará una copia del datafile , haciendo el parangón, es como el REBUILD INDEX ONLINE

- Las bases de datos Standby no se ven afectadas por un comando para mover un datafile , ni la primaria se ve afectada cuando se mueve un datafile en la Standby, funcionan como 2 entes diferentes.

- Si queremos ocupar un FLASHBACK hasta antes del cambio del datafile, el datafile seguirá estando en la ruta nueva, pero los datos cambiarán, o sea, el datafile no se reubica en la nueva posición

- Sólo se pueden mover de está forma los datafiles ONLINE, si los datafiles están OFFLINE arroja un error y se tiene que ocupar otro mecanismo

- El tema de performance debiese ser analizado más en profundidad, no creo que el tema sea total y absolutamente inocuo para el aplicativo, por lo menos en las pruebas realizadas, no encontré grandes diferencias de tiempo en las consultas que se ejecutaron antes, durante y después del movimiento del datafile en forma ONLINE.

- Si estamos en un ambiente UNIX, se puede ocupar la claúsula KEEP con lo cual al realizar la copia no se elimina el datafile antiguo, sólo se mantiene en la ruta nueva, el formato del comando

ALTER DATABASE MOVE DATAFILE 'nombre datafile' to 'nueva ruta datafile' KEEP;



by Ligarius
17.07.13. 09:55:05. 670 words, 2748 views. Categories: Tuning / Performance, Oracle 12c ,