Antes de Oracle 12c, si deseaba mover el archivo de una base de datos, tenía que cerrar la base de datos o desconectar el archivo de datos/tablespace. Este es un ejemplo de los pasos que puede seguir:
- ALTER TABLESPACE my_ts OFFLINE;
- !mv /dir_antiguo/my_ts01.dbf /dir_nuevo/my_ts01.dbf
- ALTERAR EL ARCHIVO DE RENOMBRE DE LA BASE DE DATOS ‘/old_dir/my_ts01.dbf’ A ‘/old_dir/my_ts01.dbf’;
- ALTERAR TABLESPACE my_ts EN LÍNEA;
Ahora, en Oracle 12c, puede hacer esto de manera bastante simple con un comando y otro usuario puede acceder al archivo al mismo tiempo. Para ilustrar esto, crearé un tablespace y, mientras lo muevo, otra sesión accederá al archivo.
SQL> create tablespace move_me 2 datafile '/u01/app/oracle/oradata/ora12c/move_me01.dbf' size 5g; Tablespace created. SQL> create table system.test_tab (id number) tablespace move_me; Table created. SQL> insert into system.test_tab values (10); 1 row created. SQL> commit; Commit complete.
Ahora comencemos a mover este archivo.
SQL> alter database move datafile 2 '/u01/app/oracle/oradata/ora12c/move_me01.dbf' to 3 '/u02/app/oracle/oradata/ora12c/move_me01.dbf';
Al mismo tiempo, en otra sesión, insertemos una fila en la única tabla de este tablespace.
SQL> insert into system.test_tab values (20); 1 row created. SQL> commit;
Commit complete.
Como puede ver, se permitió que se completara la transacción a pesar de que estamos moviendo el archivo.
Mientras el archivo se movía, miré el contenido de ambos puntos de montaje.
[oracle@msp-test-ora12 ora12c]$ ls -l /u01/app/oracle/oradata/ora12c total 8769660 -rw-r----- 1 oracle oinstall 10043392 Sep 17 10:52 control01.ctl -rw-r----- 1 oracle oinstall 10043392 Sep 17 10:52 control02.ctl -rw-r----- 1 oracle oinstall 5368717312 Sep 17 10:52 move_me01.dbf -rw-r----- 1 oracle oinstall 52429312 Sep 17 10:52 redo01.log -rw-r----- 1 oracle oinstall 52429312 Sep 16 22:00 redo02.log -rw-r----- 1 oracle oinstall 52429312 Sep 17 02:00 redo03.log -rw-r----- 1 oracle oinstall 1090527232 Sep 17 10:52 sysaux01.dbf -rw-r----- 1 oracle oinstall 734011392 Sep 17 10:52 system01.dbf -rw-r----- 1 oracle oinstall 68165632 Sep 17 10:45 temp01.dbf -rw-r----- 1 oracle oinstall 471867392 Sep 17 10:52 undotbs01.dbf -rw-r----- 1 oracle oinstall 1073750016 Sep 17 02:06 users01.dbf [oracle@msp-test-ora12 ora12c]$ ls -l /u02/app/oracle/oradata/ora12c total 684044 -rw-r----- 1 oracle oinstall 5368717312 Sep 17 10:52 move_me01.dbfComo puede ver, el archivo está ubicado en ambos lugares, temporalmente. Después de un tiempo, el comando MOVE se completa y vemos que nuestra tabla tiene todos los datos.
Database altered. SQL> select * From system.test_tab; ID ---------- 10 20Esta nueva característica será un gran ahorro de tiempo para mí. Muchas veces, necesito reubicar un archivo por varias razones y usaré esta nueva función.