IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Import/Export Oracle Discussion :

[Oracle 8i] Export Script de création Index


Sujet :

Import/Export Oracle

  1. #1
    Membre régulier Avatar de Bahan
    Inscrit en
    Avril 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Avril 2006
    Messages : 147
    Points : 88
    Points
    88
    Par défaut [Oracle 8i] Export Script de création Index
    Bonjour à toutes et à tous.

    J'ai une base Oracle 8.1.7 sur une machine AIX 4.2 et je voudrais faire un export des index uniquement pour obtenir un fichier regroupant le script de création de tous mes index et contraintes.

    Je suis pour ma part sur une station sous Windows XP avec un client Oracle 9.1.
    J'utilise PL/SQL Developper pour accéder à ma BDD depuis ma station.

    Quand j'essaie sous PL/SQL Developper de faire un export avec juste les index et les contraintes, j'ai l'erreur suivante qui s'affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Export started on 29/01/2007 14:26:27
    MonChemin\EXP.EXE parfile=gnagnagna\Temp\plsexp.par
     
    Connecté à: Oracle8i Enterprise Edition Release 8.1.7.4.0 - Production
    With the Partitioning option
    JServer Release 8.1.7.4.0 - Production
    EXP-00056: Erreur ORACLE 942 rencontré
    ORA-00942: Table ou vue inexistante
    EXP-00000: Procédure d export terminée avec erreur
     
    Export finished on 29/01/2007 14:26:28
    Je me suis donc un peu renseigné et ai vu qu'il pouvait y avoir ce genre de problème si l'on essayait d'exporter un base 8i avec un client Oracle de version 9i.

    J'ai également vu que je pouvais faire moi-même une sorte de commande pour pouvoir exporter directement sous la machine unix contenant la base; une commande du genre exp blablabla.

    Mais visiblement cela donne des fichiers *.dmp, or moi je voudrais avoir le fichier regroupant le script SQL de création des index et des contraintes, pour pouvoir les recréer quand je le désire.

    Est-ce que quelqu'un aurait une idée sur la manière de s'y prendre pour résoudre ce problème ?

    Cdt.

    Bahan
    Bats-toi de toutes tes forces tant que tu es en vie, et n'abandonne que quand tu es mort

  2. #2
    Rédactrice

    Avatar de kalyparker
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Janvier 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 327
    Points : 2 998
    Points
    2 998
    Par défaut
    Bonjour,

    Pour faire ce genre de scripts j'utilise une procedure pl/sql qui me crée dynamiquement mon fichier.
    Je vais chercher les infos dans les tables systems et avec le package utl_file ou dbms_output je crée mon fichier.

    Je ne sais pas si il y a mieux, mais au moins ça marche.
    It isn't that they can't see the solution, it's that they can't see the problem.
    Mes Articles et Traductions (Microstrategy, Css et Javascript)
    Si vous souhaitez contribuer à la rubrique BI, contactez-moi ou tout autre membre de l'équipe BI par MP.

  3. #3
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    On peut aussi utiliser l'option indexfile de la commande imp qui génère le DDL de fichier export passé en paramètre: http://www.developpez.net/forums/sho...ight=indexfile

  4. #4
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    De manière générale, l'export avec l'option ROWS=NO permet d'extraire la définition des objets.
    Il faut ensuite aller piocher dans le DMP pour sélectionner les ordres DDL qui nous intéressent.
    Heureusement, cette manoeuvre ingrate peut être assistée par un utilitaire dédié, par exemple http://www.ddlwizard.com/

    (Cet outil est gratuit)
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  5. #5
    Membre régulier Avatar de Bahan
    Inscrit en
    Avril 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Avril 2006
    Messages : 147
    Points : 88
    Points
    88
    Par défaut
    Pour faire ce genre de scripts j'utilise une procedure pl/sql qui me crée dynamiquement mon fichier.
    Je vais chercher les infos dans les tables systems et avec le package utl_file ou dbms_output je crée mon fichier.
    Hum, pas mal.

    En regardant dans les vues système j'en ai vu une sympa nommé : SYS.ALL_CONSTRAINTS.

    En appliquant un filtre sur le bon owner je pense que je devrais pouvoir récupérer assez d'information pour créer un script SQL de création d'index.

    Une question, je note six valeurs différentes pour la colonne CONSTRAINT_TYPE
    - C
    - O
    - P
    - R
    - U
    - V

    Je ne trouve pas la signification de ces lettres dans la FAQ Oracle 8i.
    M'est avis que P = Primary Key, U = Unique Index mais pour le reste .

    Quelqu'un saurait de manière certaine ce que signifie chacune de ces lettres ?

    On peut aussi utiliser l'option indexfile de la commande imp qui génère le DDL de fichier export passé en paramètre
    Ah, sympa aussi cette solution. Ce serait peut-être la plus rapide avec une 'tite expression régulière derrière.

    De manière générale, l'export avec l'option ROWS=NO permet d'extraire la définition des objets.
    Il faut ensuite aller piocher dans le DMP pour sélectionner les ordres DDL qui nous intéressent.
    Heureusement, cette manoeuvre ingrate peut être assistée par un utilitaire dédié, par exemple http://www.ddlwizard.com/
    Merci pour le lien. je vais aller jeter un coup d'oeil.

    Bahan
    Bats-toi de toutes tes forces tant que tu es en vie, et n'abandonne que quand tu es mort

  6. #6
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597

  7. #7
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    Citation Envoyé par Bahan
    En regardant dans les vues système j'en ai vu une sympa nommé : SYS.ALL_CONSTRAINTS.
    Pour extraire les commandes de création d'index, la vue ALL_INDEXES sera nettement plus "sympa" !
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  8. #8
    Membre régulier Avatar de Bahan
    Inscrit en
    Avril 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Avril 2006
    Messages : 147
    Points : 88
    Points
    88
    Par défaut
    Merci pour le lien.

    Pour extraire les commandes de création d'index, la vue ALL_INDEXES sera nettement plus "sympa" !
    Vui .

    Edit : Et également la vue SYS.ALL_IND_COLUMNS qui donne la liste des colonnes sur lesquelles est fondé chaque index.

    Bahan
    Bats-toi de toutes tes forces tant que tu es en vie, et n'abandonne que quand tu es mort

  9. #9
    Membre régulier Avatar de Bahan
    Inscrit en
    Avril 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Avril 2006
    Messages : 147
    Points : 88
    Points
    88
    Par défaut
    Bon alors, ça donne ceci pour les index :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    DECLARE
    	-- -------------------------------------------------------------------------
    	-- Liste Index
    	-- -------------------------------------------------------------------------
    	CURSOR cListeIdx
    		IS
    		SELECT *
    		FROM sys.all_indexes sai
    		WHERE sai.owner = 'MonUser';
     
    	vListeIdx	cListeIdx%ROWTYPE;
     
    	-- -------------------------------------------------------------------------
    	-- Liste Colonnes par Index
    	-- -------------------------------------------------------------------------
    	CURSOR cListeColIdx (vIdxName VARCHAR2)
    		IS
    		SELECT *
    		FROM sys.all_ind_columns saic
    		WHERE saic.index_owner = 'MonUser'
    		AND saic.index_name = vIdxName
    		ORDER BY
    			  saic.TABLE_NAME ASC
    			, saic.COLUMN_POSITION ASC;
     
    	vListeColIdx	cListeColIdx%ROWTYPE;
     
    	--
    	-- Variables Diverses
    	--
    	vListeCol		VARCHAR2(500);
    	vRequete		VARCHAR2(1000);
    	vUnique			VARCHAR2(50);
    	vBitmap			VARCHAR2(50);
    BEGIN
    	-- ===========================================================================
    	-- LISTE DES INDEX
    	-- ===========================================================================
    	OPEN cListeIdx;
    	LOOP
    		FETCH cListeIdx INTO vListeIdx;
    		EXIT WHEN cListeIdx%NOTFOUND;
     
    		-- -------------------------------------------------------------------------
    		-- INDEX NORMAL OU BITMAP ?
    		-- -------------------------------------------------------------------------
    		vBitmap := '';
    		IF(vListeIdx.Index_Type = 'BITMAP') THEN
    			vBitmap := 'BITMAP';
    		END IF;
     
    		-- -------------------------------------------------------------------------
    		-- INDEX UNIQUE OU NON ?
    		-- -------------------------------------------------------------------------
    		vUnique := '';
    		IF(vListeIdx.Uniqueness = 'UNIQUE') THEN
    			vUnique := 'UNIQUE';
    		END IF;
     
    		-- -------------------------------------------------------------------------
    		-- LISTE COLONNES SUR LESQUELLES EST FONDEE L'INDEX
    		-- -------------------------------------------------------------------------
    		vListeCol := NULL;
    		OPEN cListeColIdx (vListeidx.Index_Name);
    		LOOP
    			FETCH cListeColIdx INTO vListeColIdx;
    			EXIT WHEN cListeColIdx%NOTFOUND;
     
    			IF(vListeCol IS NULL) THEN
    				vListeCol := vListeColIdx.Column_Name;
    			ELSE
    				vListeCol := vListeCol||','||vListeColIdx.Column_Name;
    			END IF;
    		END LOOP;
    		CLOSE cListeColIdx;
     
    		-- -------------------------------------------------------------------------
    		-- REQUETE DE CREATION DE L'INDEX
    		-- -------------------------------------------------------------------------
    		vRequete := 'CREATE '||vBitmap||' '||vUnique||' INDEX '||vListeidx.Index_Name||' ON '||vListeidx.Table_Name||' ('||vListeCol||') TABLESPACE '||vListeidx.Tablespace_Name||';';
     
    		dbms_output.put_line(vRequete);
    	END LOOP;
    	CLOSE cListeIdx;
    END;
    J'aimerais faire de la même manière pour les contraintes de clef, seulement, il me manque une information assez importante dans la vue ALL_CONS_COLUMNS, à savoir l'identité du tablespace qui va accueillir la contrainte.

    Quelqu'un saurait s'il existe une vue où le tablespace est spécifié pour une contrainte donnée ?

    EDIT : d'après ce que je peux voir, les contraintes seraient situés dans le tablespace INDEX correspondant au tablespace DATA de leur table. Cela permet de retrouver assez facilement le tablespace et rend ce script applicable aux contraintes de clef.

    Merci à tous et à toutes pour votre aide.
    En espérant que cela sera utile à quelqu'un un jour .

    Bahan
    Bats-toi de toutes tes forces tant que tu es en vie, et n'abandonne que quand tu es mort

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Exporter un script de création de table
    Par Flackou dans le forum Débuter
    Réponses: 1
    Dernier message: 24/06/2008, 07h58
  2. [10g] Création instance oracle avec les scripts
    Par Leeloo_Multiboot dans le forum Débuter
    Réponses: 2
    Dernier message: 13/06/2008, 11h03
  3. scripts de création des tables sous oracle 10g
    Par paolo2002 dans le forum Administration
    Réponses: 9
    Dernier message: 14/02/2008, 08h02
  4. Script de création de base Oracle
    Par lon.zebu dans le forum Import/Export
    Réponses: 2
    Dernier message: 28/12/2007, 11h36
  5. Réponses: 6
    Dernier message: 07/04/2007, 15h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo