18 Août 2017
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
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 !
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