Exporter la structure d'une base

Il existe sous Oracle, à partir de la 9i, un package nommé dbms_metadata permettant de récupérer la structure de tout objet Oracle :

select dbms_metadata.get_ddl('TABLE', 'MA_TABLE') from dual;
select dbms_metadata.get_ddl('VIEW', 'MA_VUE') from dual;
select dbms_metadata.get_ddl('INDEX', 'MON_INDEX') from dual;
select dbms_metadata.get_ddl('PROCEDURE', 'MA_PROC_STOCK') from dual;
select dbms_metadata.get_ddl('INDEX', 'MON_INDEX') from dual;
select dbms_metadata.get_ddl('FUNCTION', 'MA_FONCTION') from dual;


Ainsi, pour récupérer l'ensemble de la structure des tables d'un schéma, une simple boucle PL qui écrira dans un fichier fera l'affaire (vérifier ici la possibilité de UTL_FILE et le directory associé) :

begin;
ordreSQL varchar2(4000);
fic_sortie UTL_FILE.FILE_TYPE;
fic_sortie := utl_file.fopen('dir_utl', 'structure_table.sql', w, 20000);
for struc_t in (select table_name from user_tables)
loop;
select dbms_metadata.get_ddl('TABLE', struc_t.table_name) into ordreSQL from dual;
utl_file.put_line(ordreSQL);
end loop;
utl_file.fflush(fic_sortie);
utl_file.fclose(fic_sortie);
end;
/

On obtient alors notre fichier structure_table.sql contenant tous les ordres de création des tables du schéma, qu'il suffit d'exécuter sur notre nouvelle instance :

> export ORACLE_SID=NVBASE
> cd dir_export
> sqlplus '/ as sysdba'
SQL> @structure_table.sql
Table created
...
Table created
SQL> exit
dir_export correspond au répertoire UTL ou au directory utilisé (préalablement créé)

Le même exercice peut s'appliquer à tous les autres objets Oracle cités ci-dessus.


Une autre solution pour l'export de shéma seul consiste à utiliser les outils d'import/export en spécifiant l'option rows=n à l'export ou à l'import (évidemment, si l'export est généré dans le seul but d'avoir la structure, on spécifiera cette option à l'étape d'export).

Cette dernière solution est la plus pratique dans le cadre d'une reconstruction sur une instance Oracle similaire ; la solution avec le dbms_metadata permet de faire abstraction du SGBD cible ou bien d'apporter des modifications via un scripting avant la création du nouveau schéma (modification de paramètres de stockage, renommage, ...).




Vous n'avez pas trouver réponse à votre question ? Préciser votre recherche :

Catégories