Overblog
Editer l'article Suivre ce blog Administration + Créer mon blog
23 juillet 2013 2 23 /07 /juillet /2013 09:24

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. J'avais dailleurs écris un petit article sur le sujet:

http://www.lao-dba.com/article-27038563.html

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 donneés 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.

@++ LAO

Partager cet article
Repost0

commentaires