Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Import/Export
Import/Export Forum d'entraide sur les outils d'import/export Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/01/2007, 14h46   #1
Membre du Club
 
Avatar de Bahan
 
Inscription : avril 2006
Messages : 147
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : avril 2006
Messages : 147
Points : 54
Points : 54
Envoyer un message via MSN à Bahan
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 :
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
Bahan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2007, 14h54   #2
Responsable Business Intelligence
 
Avatar de kalyparker
 
Femme
Consultant en Business Intelligence
Inscription : janvier 2007
Messages : 1 192
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : janvier 2007
Messages : 1 192
Points : 2 564
Points : 2 564
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.
kalyparker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2007, 15h08   #3
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
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
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2007, 15h12   #4
Rédacteur
 
Inscription : décembre 2002
Messages : 2 397
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 397
Points : 3 298
Points : 3 298
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)
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2007, 15h14   #5
Membre du Club
 
Avatar de Bahan
 
Inscription : avril 2006
Messages : 147
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : avril 2006
Messages : 147
Points : 54
Points : 54
Envoyer un message via MSN à Bahan
Citation:
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 ?

Citation:
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.

Citation:
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
Bahan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2007, 15h17   #6
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
http://download-west.oracle.com/docs.../ch214.htm#830
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2007, 15h22   #7
Rédacteur
 
Inscription : décembre 2002
Messages : 2 397
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 397
Points : 3 298
Points : 3 298
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" !
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2007, 15h26   #8
Membre du Club
 
Avatar de Bahan
 
Inscription : avril 2006
Messages : 147
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : avril 2006
Messages : 147
Points : 54
Points : 54
Envoyer un message via MSN à Bahan
Merci pour le lien.

Citation:
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
Bahan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2007, 17h06   #9
Membre du Club
 
Avatar de Bahan
 
Inscription : avril 2006
Messages : 147
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : avril 2006
Messages : 147
Points : 54
Points : 54
Envoyer un message via MSN à Bahan
Bon alors, ça donne ceci pour les index :

Code :
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
Bahan est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h13.


 
 
 
 
Partenaires

Hébergement Web