Déplacer un ou plusieurs datafiles d’un filesystem vers un autre oracle12c

 

Objectif :
Déplacer un ou plusieurs datafiles d’un filesystem vers un autre

Les raisons qui peuvent amener à déplacer un datafile peuvent être multiples

  1. Erreur lors de la création
  2. Manque cruelle de place
  3. Déplacement de fichier en fonction de leur activité (lecture / ecriture).

Jusqu’en 11g pour déplacer un datafile (pour le mettre sur un autre filesystem) il fallait:

  1. mettre le tablespace offline
  2. copier le(s) fichier(s) à partir de l’OS
  3. faire ALTER DATABASE RENAME FILE … TO …

C’est une opération totalement online, sans aucun verrou, et très peu d’overhead: simplement pendant que Oracle fait la copie de fichier,
les process qui veulent y accéder en écriture écriront à la fois dans l’ancien fichier et le nouveau.
Et ils liront uniquement l’ancien jusqu’à ce que la copie soit terminée.
Une fois que la copie est terminée, ils liront uniquement le nouveau fichier.
Et l’ancien fichier sera supprimé sauf si on a précisé KEEP.

TEST :
=======
Nous allons deplacer le datafile /u02/oradata/ORA11T12/users01.dbf vers
/u03/oradata/ORA11T12/users01.dbf
pour cela nous avons utiliser deux sessions

Session1: connexion en sys
Session2: connexion en C##STEVEADM utilisateur global avec tablespace par defaut USERS qui va faire des insertions dans une table customers durant le deplacement
du datafile par le utilisateur sys

 

1) Connexion avec le user global de test C##STEVEADM

sqlplus C##STEVEADM/*****@ORA11T12

SQL> set linesize 300

2) Recherche du tablespace par defaut du user

SQL> select username,DEFAULT_TABLESPACE,ACCOUNT_STATUS from dba_users where username=’C##STEVEADM’;
USERNAME DEFAULT_TABLESPACE ACCOUNT_STATUS
————————————————————— ——————————–
C##STEVEADM USERS OPEN

3) Controle de l’emplacement des datafile

SQL> select file_name from dba_data_files;

FILE_NAME
——————————————————————————–
/u02/oradata/ORA11T12/users01.dbf
/u02/oradata/ORA11T12/undotbs01.dbf
/u02/oradata/ORA11T12/system01.dbf
/u02/oradata/ORA11T12/sysaux01.dbf
5) créer un table de test

CREATE TABLE customers
( customer_id number(10) NOT NULL,
customer_name varchar2(50) NOT NULL,
city varchar2(50)
);
SQL> show user
USER est « C##STEVEADM »
SQL>

 

insert into customers (customer_id,customer_name,city) values (01,’choums’,’paris’);
CUSTOMER_ID CUSTOMER_NAME CITY
———– ————————————————– ——————————–
1 choums paris

 

 

insert into customers (customer_id,customer_name,city) values (02,’choums2′,’douala’);
insert into customers (customer_id,customer_name,city) values (03,’choums3′,’londre’);
insert into customers (customer_id,customer_name,city) values (04,’choums4′,’bana’);
insert into customers (customer_id,customer_name,city) values (05,’choums5′,’manjo’);

 

Action avec le user sys
============================

[oracle@nsbd47 ~]$ sqlplus sys/*******@ORA11T12 as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Fri Mar 17 09:52:25 2017

Copyright (c) 1982, 2014, Oracle. All rights reserved.
Connecte a :
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 – 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
SQL> alter database move datafile ‘/u02/oradata/ORA11T12/users01.dbf’ to ‘/u03/oradata/ORA11T12/users01.dbf’;

Base de donnees modifiee.

SQL> select file_name from dba_data_files;

FILE_NAME
——————————————————————————–
/u02/oradata/ORA11T12/system01.dbf
/u02/oradata/ORA11T12/sysaux01.dbf
/u02/oradata/ORA11T12/undotbs01.dbf
/u03/oradata/ORA11T12/users01.dbf

SQL> !ls -ltr /u03/oradata/ORA11T12/users01.dbf
-rw-r—– 1 oracle oinstall 5251072 17 mars 09:56 /u03/oradata/ORA11T12/users01.dbf

SQL>

 

 

OraclementVotre

 

Post Comment

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *