Oracle
 sql >> Base de données >  >> RDS >> Oracle

12c Déplacer les fichiers de données en ligne

Avant Oracle 12c, si vous vouliez déplacer le fichier d'une base de données, vous deviez soit fermer la base de données, soit mettre le fichier de données/tablespace hors ligne. Voici un exemple des étapes que vous pourriez suivre :

  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 EN LIGNE ;

Désormais, dans Oracle 12c, vous pouvez le faire très simplement avec une seule commande et un autre utilisateur peut accéder au fichier en même temps. Pour illustrer cela, je vais créer un espace de table et, tout en le déplaçant, faire en sorte qu'une autre session accède au fichier.

SQL> créer tablespace move_me2 fichier de données '/u01/app/oracle/oradata/ora12c/move_me01.dbf' taille 5g ; tablespace créé.SQL> créer table system.test_tab (numéro d'identification) tablespace move_me ; table créée.SQL> insérer dans les valeurs system.test_tab (10);1 ligne créée.SQL> commit;Commit complete.

Commençons maintenant le déplacement de ce fichier.

SQL> modifier la base de données déplacer le fichier de données  2  '/u01/app/oracle/oradata/ora12c/move_me01.dbf' vers  3  '/u02/app/oracle/oradata/ora12c/move_me01.dbf' ;

En même temps, dans une autre session, insérons une ligne dans la seule table de ce tablespace.

SQL> insère dans les valeurs system.test_tab (20);1 ligne créée.SQL> commit;
Commit terminé.

Comme vous pouvez le voir, la transaction a été autorisée à se terminer même si nous sommes en train de déplacer le fichier.

Pendant que le fichier se déplaçait, j'ai regardé le contenu des deux points de montage.

[oracle@msp-test-ora12 ora12c]$ ls -l /u01/app/oracle/oradata/ora12ctotal 8769660-rw-r----- 1 oracle oinstall   10043392 Sep 17 10:52 control01.ctl- rw-r----- 1 installation oracle   10043392 17 septembre 10:52 control02.ctl-rw-r----- 1 installation oracle 5368717312 17 septembre 10:52 move_me01.dbf-rw-r----- 1 installation oracle   52429312 17 septembre 10:52 redo01.log-rw-r----- 1 installation oracle   52429312 16 septembre 22:00 redo02.log-rw-r----- 1 installation oracle   52429312 17 septembre 02 :00 redo03.log-rw-r----- 1 installation oracle 1090527232 17 septembre 10:52 sysaux01.dbf-rw-r----- 1 installation oracle 734011392 17 septembre 10:52 system01.dbf-rw-r ----- 1 installation oracle 68165632 17 septembre 10:45 temp01.dbf-rw-r----- 1 installation oracle  471867392 17 septembre 10:52 undotbs01.dbf-rw-r----- 1 installation oracle 1073750016 17 septembre 02:06 users01.dbf[oracle@msp-test-ora12 ora12c]$  ls -l /u02/app/oracle/oradata/ora12ctotal 684044-rw-r----- 1 oracle oinstall 5368717312 17 septembre 10 :52 move_me01.dbf
Comme vous pouvez le voir, le fichier se trouve temporairement aux deux endroits.Après un certain temps, la commande MOVE se termine et nous voyons que notre table contient toutes les données.
Base de données modifiée.SQL> select * From system.test_tab; ID----------        10        20
 Cette nouvelle fonctionnalité me fera gagner beaucoup de temps. Souvent, je dois déplacer un fichier pour un certain nombre de raisons et j'utiliserai cette nouvelle fonctionnalité.