Rubriques Unix et Oracle
Accueil du siteOracleadministrationRéorganiser sa base de données
Deplacer les fichiers d’un tablespace
mercredi 28 décembre 2005
par Laurent
popularité : 34%

Contexte

Le contexte est assez simple. Quelquefois, notre joli métier de DBA nous oblige à réorganiser notre base de données. Un filesystem qui atteint les sommets sans possibilité d’extension, un mauvais design, un disque dur en train de mourrir, une réorganisation. Bref, les cas sont nombreux.

Dans ces cas et d’autres non citées, il peut-être utile de savoir déplacer un tablespace, ou plus simplement déplacer les fichiers d’un tablespace.

La méthode

La méthode ci dessous est applicable aux tablespaces non système : SYSTEM ou UNDO n’entrent pas dans ce mode de fonctionnement.

La méthode est assez simple et se décompose en plusieurs points :

- Déterminer où se situent les fichiers constitutifs
- Déterminer la destination des fichiers de données
- Mettre le tablespace en lecture-seule puis hors-ligne
- Déplacer nos fichiers (au niveau système)
- Déplacer les fichiers de données (au niveau Oracle)
- Mettre le tablespace en ligne et en lecture-ecriture
- Vérifier ce que le fichier de contrôle reconnait le nouvel emplacement.

... simple non ?

Un cas concret

Voici maintenant un cas concret de deplacement de fichier. Par exemple, nous allons déplacer le(s) fichier(s) de données du tablespace EXAMPLE de notre base.

- Déterminer l’emplacement des fichiers de données du tablespace


SQL> SELECT tablespace_name,file_name
 2  FROM dba_data_files
 3  WHERE tablespace_name='EXAMPLE'
 4  /

TABLESPACE_NAME  FILE_NAME
---------------  ----------------------------------
EXAMPLE          /home/ora10g/u02/orcl/example01.dbf

- Déterminer la destination de notre fichier. Disons que nous allons le déplacer ici (u02 vers u03) :


/home/ora10g/u03/orcl/example01.dbf

- Mettre le tablespace en lecture-seule puis hors-ligne


SQL> ALTER TABLESPACE example READ ONLY;
Tablespace modifie.

SQL> ALTER TABLESPACE example OFFLINE;

Tablespace modifie.

SQL> SELECT tablespace_name,status
 2  FROM dba_tablespaces
 3  WHERE tablespace_name='EXAMPLE';

TABLESPACE_NAME                STATUS
------------------------------ ---------
EXAMPLE                        READ ONLY

SQL> SELECT tablespace_name,file_name,online_status
 2  FROM dba_data_files
 3  WHERE tablespace_name='EXAMPLE'
 4  /

TABLESPACE_NAME  FILE_NAME                            ONLINE_
---------------  ------------------------------------ -------
EXAMPLE          /home/ora10g/u02/orcl/example01.dbf  OFFLINE

- Déplacer nos fichiers (au niveau système)


SQL> !mv /home/ora10g/u02/orcl/example01.dbf /home/ora10g/u03/orcl/

SQL> !ls /home/ora10g/u02/orcl/
control01.ctl  control02.ctl  control03.ctl  flash_recovery_area  redo01.log  redo02.log  redo03.log  sysaux01.dbf  system01.dbf  temp01.dbf  undotbs01.dbf  users01.dbf

SQL> !ls /home/ora10g/u03/orcl
example01.dbf

- Déplacer les fichiers de données (au niveau Oracle)


SQL> ALTER DATABASE RENAME FILE '/home/ora10g/u02/orcl/example01.dbf'
 2  TO '/home/ora10g/u03/orcl/example01.dbf'
 3  /

Base de donnees modifiee.

On réitère le processus autant de fois que le tablespace dispose de fichiers.

- Mettre le tablespace en ligne puis en lecture-ecriture


SQL> ALTER TABLESPACE example ONLINE;

Tablespace modifie.

SQL> ALTER TABLESPACE example READ WRITE;

Tablespace modifie.

- Vérifier ce que le fichier de contrôle reconnait le nouvel emplacement.

Rien de plus simple. Executer la commande :


SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE;

Cette commande va génerer un fichier trace situé dans le user_dump_dest (paramètre d’instance). Ce fichier contient l’ordre de création d’un fichier de contrôle en fonction des données de la base (localisation des fichiers de journaux (redo log), et fichiers de données).

Si le déplacement a bien été pris en compte, alors c’est indiqué dans le fichier.

Dans mon cas, ce fichier contient, entre autre :


CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  ARCHIVELOG
   MAXLOGFILES 16
   MAXLOGMEMBERS 3
   MAXDATAFILES 100
   MAXINSTANCES 8
   MAXLOGHISTORY 292
LOGFILE
 GROUP 1 '/home/ora10g/u02/orcl/redo01.log'  SIZE 50M,
 GROUP 2 '/home/ora10g/u02/orcl/redo02.log'  SIZE 50M,
 GROUP 3 '/home/ora10g/u02/orcl/redo03.log'  SIZE 50M
-- STANDBY LOGFILE
DATAFILE
 '/home/ora10g/u02/orcl/system01.dbf',
 '/home/ora10g/u02/orcl/undotbs01.dbf',
 '/home/ora10g/u02/orcl/sysaux01.dbf',
 '/home/ora10g/u02/orcl/users01.dbf',
 '/home/ora10g/u03/orcl/example01.dbf'
CHARACTER SET WE8ISO8859P1
;

On voit bien que la modification a été prise en compte.

 
Messages de forum :
Deplacer les fichiers d’un tablespace
mercredi 24 novembre 2010
par  abou
Superbe article, seulement je suis dans une situation ou il me faut deplacer ma base d’un disque vers un autre(sur une machine sun solaris) car le disque ou elle est localisée est plein. Que puis-je faire.

Deplacer les fichiers d’un tablespace
Deplacer les fichiers d’un tablespace
lundi 28 septembre 2009
par  Baloux

Bonjour,

Très bien expliqué !

Juste une petite question :

Est ce que cette méthode est applicable au tablespace d’UNDO ?

D’avance merci,

Baloux



    Deplacer les fichiers d’un tablespace
    lundi 28 septembre 2009
    par  Baloux

    Non, ... que pour les tablespaces non systems ... j’avais lu un peu vite.

    Il y a t-il une méthode pour le tablespace d’UNDO ?

      Deplacer les fichiers d’un tablespace
      mardi 29 septembre 2009
      par  Laurent

      Salut et merci pour le commentaire. Alors pour le tablespace d’UNDO, c’est un peu particulier mais bien plus simple car le tablespace d’undo est paramétré !

      Il faut donc créer un Tablespace d’undo supplémentaire, puis réaliser un ALTER SYSTEM SET UNDO_TABLESPACE=monnouveauTBS.

      Sinon, si vraiment tu veux déplacer le fichier existant, tu dois arréter ton instance, la redémarrer en MOUNT, puis réaliser le déplacement avec la commande ALTER DATABASE RENAME FILE ’ancien fichier’ TO ’nouveau fichier’. Comme pour le tablespace SYSTEM !

      Voilà ! Laurent

Deplacer les fichiers d’un tablespace
vendredi 25 juillet 2008
par  Chewbacca
Merci super article. Et super site. Propre / simple rapide a chargé et bourré d’astuce.

Deplacer les fichiers d’un tablespace
mercredi 25 juin 2008
par  jerome

Merci pour ces astuces, je me rappelais plus des syntaxes des commandes et c’est trés bien expliqué. En plus ton site est bien indéxé c’est la 1er réponse dans google avec ’oracle deplacer datafile’

Merci beaucoup