Oracle
 sql >> Database >  >> RDS >> Oracle

12c Sposta i file di dati in linea

Prima di Oracle 12c, se si desidera spostare il file di un database, è necessario arrestare il database o portare offline il file di dati/tablespace. Ecco un esempio dei passaggi che potresti eseguire:

  1. ALTER TABLESPACE my_ts OFFLINE;
  2. !mv /old_dir/my_ts01.dbf /new_dir/my_ts01.dbf
  3. ALTER DATABASE RENAME FILE ‘/old_dir/my_ts01.dbf’ TO ‘/old_dir/my_ts01.dbf’;
  4. ALTER TABLESPACE my_ts ONLINE;

Ora in Oracle 12c, puoi farlo semplicemente con un comando e un altro utente può accedere al file contemporaneamente. Per illustrare questo, creerò un tablespace e, mentre lo sposto, un'altra sessione accederà al file.

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.

Ora iniziamo lo spostamento di questo file.

SQL> alter database move datafile
  2  '/u01/app/oracle/oradata/ora12c/move_me01.dbf' to
  3  '/u02/app/oracle/oradata/ora12c/move_me01.dbf';

Allo stesso tempo, in un'altra sessione, inseriamo una riga nell'unica tabella in questo tablespace.

SQL> insert into system.test_tab values (20);
1 row created.
SQL> commit;
Commit complete.

Come puoi vedere, la transazione è stata autorizzata a completarsi anche se stiamo spostando il file.

Mentre il file si stava spostando, ho guardato il contenuto di entrambi i punti di montaggio.

[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
Come puoi vedere, il file si trova in entrambi i punti, temporaneamente. Dopo un po' di tempo, il comando MOVE viene completato e vediamo che la nostra tabella contiene tutti i dati.
Database altered.
SQL> select * From system.test_tab;
        ID
----------
        10
        20
 Questa nuova funzionalità mi farà risparmiare molto tempo. Molte volte, ho bisogno di riposizionare un file per una serie di motivi e utilizzerò questa nuova funzionalità.