Déplacer une base de données Oracle sur un autre disque

Ci dessous, nous allons voir comment déplacer manuellement une base de données Oracle sur un autre disque.
Espace disque saturé ou endommagé ?
Il y a plusieurs raisons de vouloir déplacer une base de données. Si vous ne souhaitez déplacer que certains fichiers, vous pouvez tout aussi bien suivre cet article, car l’opération va s’effectuer en plusieurs étapes.
Nous allons déplacer la base sur le disque D:\ dans le répertoire D:\EASYDB
Ces opérations s’effectuent base arrêtée.
/!\ Toujours penser à faire un backucp full de la base + controlfiles + spfile /!\
1 – Déplacement du ou des controlfiles

  • Chercher les controlfiles :
SQL> show parameter control_files
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_files string C:\oracle\EASYDB\CONTROL.DBF
  • Créer un pfile
SQL> create pfile='C:\initEASY.ora' from spfile;
File creaded
  • Arrêter la base et déplacer le ou les controlfiles
SQL> shutdown immediate
Database dismounted.
ORACLE instance shut down.
C:\Users\BSO>move C:\oracle\EASYDB\CONTROL.DBF D:\EASYDB\

Ouvrir le fichier C:\initEASY.ora, et modifier la destination du ou des controlfiles

*.control_files='D:\EASYDB\CONTROL.DBF'
  • Monter la base à partir du pfile
SQL> startup mount pfile='C:\initEASY.ora';
  • On oublie pas créer le spfile à partir du pfile :
SQL> create spfile from pfile='C:\initEASY.ora';
File created.

2 – Déplacement des logs files

  • Chercher les fichiers de logs :
SQL> select member from v$logfile;
MEMBER
--------------------------------------------
C:\RMAN\EASY\ONLINELOG\O1_MF_2_8YLTNZQ5_.LOG
C:\RMAN\EASY\ONLINELOG\O1_MF_1_8YLTNYXK_.LOG
  • En gardant la base en mount, les déplacer vers D:\EASYDB
C:\Users\BSO>move C:\RMAN\EASY\ONLINELOG\O1_MF_1_8YLTNYXK_.LOG D:\EASYDB\
1 fichier(s) déplacé(s).
C:\Users\BSO>move C:\RMAN\EASY\ONLINELOG\O1_MF_2_8YLTNZQ5_.LOG D:\EASYDB\
1 fichier(s) déplacé(s).
  • Utiliser la commande RENAME FILE sur les 2 fichiers :
ALTER DATABASE RENAME FILE 'C:\RMAN\EASY\ONLINELOG\O1_MF_1_8YLTNYXK_.LOG' TO 'D:\EASYDB\O1_MF_1_8YLTNYXK_.LOG';
ALTER DATABASE RENAME FILE 'C:\RMAN\EASY\ONLINELOG\O1_MF_2_8YLTNZQ5_.LOG' TO 'D:\EASYDB\O1_MF_2_8YLTNZQ5_.LOG';
  • Vérification :
SQL> select member from v$logfile;
MEMBER
----------------------------------
D:\EASYDB\O1_MF_2_8YLTNZQ5_.LOG
D:\EASYDB\O1_MF_1_8YLTNYXK_.LOG

3 – Déplacement des datafiles
L’opération est identique à l’opération précédente

  • Chercher l’emplacement de tous les fichiers :
SQL> SELECT name FROM v$datafile;
NAME
------------------------------------------------
C:\ORACLEXE\APP\ORACLE\ORADATA\EASY\SYSTEM.DBF
C:\ORACLEXE\APP\ORACLE\ORADATA\EASY\UNDOTBS1.DBF
C:\ORACLEXE\APP\ORACLE\ORADATA\EASY\SYSAUX.DBF
C:\ORACLEXE\APP\ORACLE\ORADATA\EASY\USERS.DBF
SQL> select FILE_NAME from dba_temp_files;
FILE_NAME
--------------------------------------------
C:\ORACLEXE\APP\ORACLE\ORADATA\EASY\TEMP.DBF
  • Déplacer les fichiers après avoir arrêté la base
move C:\ORACLEXE\APP\ORACLE\ORADATA\EASY\SYSTEM.DBF D:\EASYDB\SYSTEM.DBF;
move C:\ORACLEXE\APP\ORACLE\ORADATA\EASY\UNDOTBS1.DBF D:\EASYDB\UNDOTBS1.DBF;
move C:\ORACLEXE\APP\ORACLE\ORADATA\EASY\SYSAUX.DBF D:\EASYDB\SYSAUX.DBF;
move C:\ORACLEXE\APP\ORACLE\ORADATA\EASY\USERS.DBF D:\EASYDB\USERS.DBF;
move C:\ORACLEXE\APP\ORACLE\ORADATA\EASY\TEMP.DBF D:\EASYDB\TEMP.DBF;
  • Monter la base et « renommer » les fichiers :
SQL> startup mount;
ORACLE instance started.
Total System Global Area 1071333376 bytes
Fixed Size 1388352 bytes
Variable Size 666894528 bytes
Database Buffers 398458880 bytes
Redo Buffers 4591616 bytes
Database mounted.
SQL> alter database rename file 'C:\ORACLEXE\APP\ORACLE\ORADATA\EASY\SYSTEM.DBF' to 'D:\EASYDB\SYSTEM.DBF';
Database altered.
SQL> alter database rename file 'C:\ORACLEXE\APP\ORACLE\ORADATA\EASY\UNDOTBS1.DBF' to 'D:\EASYDB\UNDOTBS1.DBF';
Database altered.
SQL> alter database rename file 'C:\ORACLEXE\APP\ORACLE\ORADATA\EASY\SYSAUX.DBF' to 'D:\EASYDB\SYSAUX.DBF';
Database altered.
SQL> alter database rename file 'C:\ORACLEXE\APP\ORACLE\ORADATA\EASY\USERS.DBF'to 'D:\EASYDB\USERS.DBF';
Database altered.
SQL> alter database rename file 'C:\ORACLEXE\APP\ORACLE\ORADATA\EASY\TEMP.DBF'to 'D:\EASYDB\TEMP.DBF';
Database altered.
  • Ouvrir la base et vérifier la destination des fichiers :
SQL> alter database open;
Database altered.
SQL> SELECT name FROM v$datafile;
NAME
---------------------------------
D:\EASYDB\SYSTEM.DBF
D:\EASYDB\UNDOTBS1.DBF
D:\EASYDB\SYSAUX.DBF
D:\EASYDB\USERS.DBF
SQL> select FILE_NAME from dba_temp_files;
FILE_NAME
--------------------------------------------
D:\EASYDB\TEMP.DBF