Overblog
Editer l'article Suivre ce blog Administration + Créer mon blog
LAMI DBA

Articles autour des SGBD Oracle, SQL Server & PostgreSQL

Oracle 12c - Administration - Déplacer un datafile en ligne...

Hello !

Aujourd'hui, j'ai décidé de vous parler d'une fonctionnalité de la 12c qui me parait bien pratique, le déplacement ou le renommage online de datafile ! Avant la 12c pour déplacer un datafile, il fallait le passer en OFFLINE, puis via le system (et donc pas sans risques) le déplacer, et enfin effectuer un rename.

La preuve par l'exemple...

 SQL> select file_name from dba_data_files;
FILE_NAME
-------------------------------------------------------------------------
/ORADB/oradata/ORADB/system01.dbf
/ORADB/oradata/ORADB/sysaux01.dbf
/ORADB/oradata/ORADB/undotbs01.dbf
/ORADB/oradata/ORADB/users01.dbf

 

Afin d'illuster cette fonctionnalité, je vais déplacer mon datafile /ORADB/oradata/ORADB/users01.dbf vers l'emplacement /u02/ORADB/oradata

 SQL> alter database move datafile '/ORADB/oradata/ORADB/users01.dbf' to '/u02/ORADB/oradata/user01.dbf'; 

 

Avant d'excuter la commande, ouvrez une autre session sur votre schema de test (lao dans mon cas) afin de vérifier que non seulement les données sont accessibles mais en plus vous pouvez continuer à en inserer.
En fonction de la taille du fichier à déplacer au bout de quelques instants, dans votre première session vous avez le message suivant.

 Database altered. 

 

Durant le période de la copie, comme je l'indiquais les données restent accessibles en lecture /écriture

 SQL> connect lao/lao Connected. SQL> insert into t values (5);
 1 row created.
 SQL> commit;
 Commit complete.
 
SQL> select count(*) from t;
 COUNT(*) 
 ---------- 
  14999991 
SQL> insert into t values (5);
1 row created.
SQL> commit;
Commit complete.

SQL> select count(*) from t;
COUNT(*)
----------
14999992 

 

La confiance n'exclue pas le contrôle !

 

 SQL> select file_name from dba_data_files; 
FILE_NAME 
-------------------------------------------------------------------------- /ORADB/oradata/ORADB/system01.dbf
/ORADB/oradata/ORADB/sysaux01.dbf
/ORADB/oradata/ORADB/undotbs01.dbf
/u02/ORADB/oradata/user01.dbf 

 

et...

 

ls -lht /ORADB/oradata/ORADB/ total 6.1G
  -rw-r-----1 oracle oinstall 51M Jul 23 09:43 redo03.log
  -rw-r-----. 1 oracle oinstall 4.6G Jul 23 09:43 system01.dbf
  -rw-r-----. 1 oracle oinstall 451M Jul 23 09:43 undotbs01.dbf
  -rw-r-----. 1 oracle oinstall 551M Jul 23 09:35 sysaux01.dbf
  -rw-r-----. 1 oracle oinstall 51M Jul 23 09:10 redo02.log
  -rw-r-----. 1 oracle oinstall 51M Jul 23 09:10 redo01.log
  -rw-r-----. 1 oracle oinstall 351M Jul 22 10:09 temp01.dbf
  
ls -lht /u02/ORADB/oradata/ total 1.4G
  -rw-r-----. 1 oracle oinstall 1.4G Jul 23 09:40 user01.dbf

 

 

 

Et voila, mon datafile a bien été déplacé pendant que mes données restaient accessibles !

Mais encore...

 

Qui peut le plus peut le moins, donc avec cette fonctionnalité, on peut
-1/ juste renommer le datafile.
-2/ Egalement déplacer les datafiles concernant les tablespaces SYSTEM & SYSAUX
-3/ Via l'option KEEP en fin de ligne permet de faire conserver une copie du fichier à son emplacement d'origine.
-4/ Dans le cas de l'utilisation d'un flashback database, le fichier ne sera pas remis à son emplacement initial.

@++ LAMI

Partager cet article
Repost0
Pour être informé des derniers articles, inscrivez vous :
Commenter cet article