sql >> Base de Datos >  >> RDS >> Oracle

12c Mover archivos de datos en línea

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:

  1. ALTER TABLESPACE my_ts OFFLINE;
  2. !mv /dir_antiguo/my_ts01.dbf /dir_nuevo/my_ts01.dbf
  3. ALTERAR EL ARCHIVO DE RENOMBRE DE LA BASE DE DATOS ‘/old_dir/my_ts01.dbf’ A ‘/old_dir/my_ts01.dbf’;
  4. 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.dbf
Como 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
        20
 Esta 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.