Migration par transport tablespace
On veut migrer une base 11.2.0.4 MYDB sur un serveur_source vers une base 19c sur un nouveau serveur serveur_destination. Mais la base est volumineuse et un export/import n'est pas envisageable en terme de temps de migration. On transporte donc les tablespaces utilisateurs (sans SYSTEM, SYSAUX, TEMP et UNDO).
Le nom de la base et le chemin des fichiers est le même que sur le serveur source. S'il faut changer les chemins ou renommer les fichiers, se reporter à la procédure pour déplacer les fichiers d'une base.
Sur la base SOURCE 11g
Avant de lancer la migration
- Vérifier s'il n'y a pas d'incompatibilité au TRANSPORT_TABLESPACE
EXECUTE DBMS_TTS.TRANSPORT_SET_CHECK('TBLSP_1,TBLSP_2,TBLSP_3',TRUE);
SELECT * FROM TRANSPORT_SET_VIOLATIONS;
aucune ligne selectionnee
- Lister les fichiers des tablespaces à transporter (liste nécessaire pour le futur import)
SELECT file_name FROM dba_data_files;
- Faire un export des metadonnées uniquement :
expdp system/'system_password' DUMPFILE=exp_TTS_MYDB.dmp DIRECTORY=DUMP FULL=Y CONTENT=METADATA_ONLY
- Extraire les DDLs dans un fichier SQL avec impdp:
impdp system/'system_password' DUMPFILE=exp_TTS_MYDB.dmp DIRECTORY=DUMP SQLFILE=MYDB.sql
Dans ce fichier SQL, extraire les ordres de création pour :
- recréer le tablespace TEMP avec le bon nom (si spécifique)
- recréer les utilisateurs non-systèmes avec ses GRANT
- recréer les DIRECTORY
Au moment de la migration
Stopper le LISTENER, redémarrer la base pour être sûr qu'il n'y a plus de sessions utilisateurs
lsnrctl stop
sqlplus / as sysdba
SQL> shutdown immediate;
SQL> startup
Passer les tablespaces utilisateurs en read only
alter tablespace TBLSP_1 read only;
alter tablespace TBLSP_2 read only;
alter tablespace TBLSP_3 read only;
Exporter les métadonnées spécifiquement liées aux tablespaces transportés :
expdp system/'system_passwd' DUMPFILE=exp_TTS_MYDB.dmp DIRECTORY=DUMP TRANSPORT_TABLESPACES=TBLSP_1,TBLSP_2,TBLSP_3 LOGFILE=exp_TTS_MYDB.log
Copier les fichiers des tablespaces utilisateurs vers le nouveau serveur en 19c, ainsi que le dump des metadonnées des tablespaces :
scp /u01/mydb/tblsp_* serveur_dest:/u01/mydb
scp /export/expdp_TTS_MYDB.exp serveur_dest:/export
A ce stade la base 11g sur serveur_source peut être remise en read write, mais ce n'est pas forcément souhaitable, si on compte passer la production sur la base 19c :
sqlplus / as sysdba
alter tablespace TBLSP_1 read write;
alter tablespace TBLSP_2 read write;
alter tablespace TBLSP_3 read write;
exit
lsnrctl start
Sur la base DESTINATION 19c
Important : Créer la base en mode personnalisé, avec compatible=11.2.0 et vérifier les paramètres NLS de la base source pour bien remettre les mêmes. Pour l'instant, seul le tablespace USERS par défaut est laissé sur la base.
Recréer les utilisateurs Oracle (qui auront le tablespace USERS par défaut, puisque les autres tablespaces ne sont pas encore rattachés) par rapport au DDL extrait plus haut.
CREATE USER "APPLIUSER" IDENTIFIED BY VALUES '622F2895A4A8F54E' TEMPORARY TABLESPACE "TEMP";
ALTER USER "APPLIUSER" DEFAULT ROLE ALL;
Et les DIRECTORIES :
CREATE DIRECTORY DUMP AS '/export';
Importer les metadonnées des tablespaces transportés. Contrairement à l'export sur la base source, ici on liste tous les fichiers des tablespaces transportés, pas seulement le nom des tablesapces :
impdp system/'system_password!' DUMPFILE=exp_TTS_MYDB.dmp DIRECTORY=DUMP TRANSPORT_DATAFILES=/u01/mydb/tblsp_1_01.dbf TRANSPORT_DATAFILES=/u01/mydb/tblsp_1_02.dbf TRANSPORT_DATAFILES=/u01/mydb/tblsp_2_01.dbf TRANSPORT_DATAFILES=/u01/mydb/tblsp_2_01.dbf LOGFILE=imp_TTS_MYDB.log
Repasser les tablespace en read write :
alter tablespace TBLSP_1 read write;
alter tablespace TBLSP_2 read write;
alter tablespace TBLSP_3 read write;
Modifier les utilisateurs pour leur attribuer le bon tablespace par défaut :
ALTER USER "APPLIUSER" DEFAULT TABLESPACE "TBLSP_1";
Si le tablespace USERS n'a plus d'utilité, le supprimer :
drop tablespace USERS including contents and datafiles;
Repasser le paramètre compatible en version 19 et valider la configuration de la base par un redémarrage :
alter system set compatible='19.0.0' scope=spfile;
SHUTDOWN IMMEDIATE;
STARTUP;