Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels 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 15/02/2007, 09h32   #1
Candidat au titre de Membre du Club
 
Inscription : octobre 2006
Messages : 35
Détails du profil
Informations personnelles :
Âge : 43
Localisation : France

Informations forums :
Inscription : octobre 2006
Messages : 35
Points : 12
Points : 12
Par défaut Tablespace index avec export/import

Bonjour à tou(te)s,
Je dois faire une migration d'une base Oracle 7.3.4 sur un Digtal-Unix vers une version Oracle 9i sur un serveur Windows 2003, et pour ce faire, j'ai opté pour la solution export/import :
  • Sur le serveur Unix : exp user/mot_de_passe FULL=Y FILE=...
  • Sur le serveur Windows : imp user/mot_de_passe@nom_base FULL=N FROMUSER=User_Old TOUSER=User_New FILE= ...
Au préalable, j'ai créé deux TABLESPACE DATA et INDEX dans la nouvelle base et un utilisateur User_New à qui j'ai affecté le TABLESPACE DATA nouvellement créé comme TABLESPACE par défaut.
L'import se passe bien mais tous les objets de type INDEX sont créés dans le TABLESPACE par défaut de l'utilisateur.
J'ai lu une discussion avec l'import exécuté en deux phases :
  • La première qui consiste à utiliser l'option INDEXFILE de l'import, de modifier et d'exécuter le fichier SQL pour créer tous les objets de l'utilisateur User_Old,
  • la seconde qui consiste à importer avec l'option IGNORE=Y.
Y a-t'il un autre moyen de créer directement les objets de type INDEX dans un TABLESPACE particulier pendant l'import ou est-ce la seule solution pour ne pas avoir à déplacer les objets INDEX après un import ?

Merci de vos réponses.
kryst est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2007, 11h10   #2
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
ne serait pas plus simple de faire un rebuild pour les déplacer après coup ?
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2007, 11h26   #3
Membre expérimenté

 
Avatar de NGasparotto
 
Nicolas Gasparotto
Inscription : janvier 2007
Messages : 424
Détails du profil
Informations personnelles :
Nom : Nicolas Gasparotto

Informations forums :
Inscription : janvier 2007
Messages : 424
Points : 500
Points : 500
Citation:
Envoyé par Fred_D
ne serait pas plus simple de faire un rebuild pour les déplacer après coup ?
Le problème de cette méthode est une occupation du double de place au moins durant la manip.

Nicolas.
NGasparotto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2007, 12h03   #4
Candidat au titre de Membre du Club
 
Inscription : octobre 2006
Messages : 35
Détails du profil
Informations personnelles :
Âge : 43
Localisation : France

Informations forums :
Inscription : octobre 2006
Messages : 35
Points : 12
Points : 12
Citation:
ne serait pas plus simple de faire un rebuild pour les déplacer après coup ?
Pour toi, c'est une meilleure solution que de créer la structure des tables et index puis d'insérer les lignes ?

Pour utiliser la notion de REBUILD, j'ai pensé au code suivant :
Code :
1
2
3
4
SQL> SPOOL C:\ORACLE\ORADATA\KRYST\ADMIN\SQL\INDEX_LOVE.sql    
SQL> SELECT owner,index_name,tablespace_name FROM dba_indexes WHERE OWNER = 'User_New';
Après remaniement du SPOOL
SQL>ALTER INDEX NOM_INDEX REBUILD TABLESPACE TS_INDEX;
Penses-tu que cette façon, je déplacerai tous les objets INDEX dans le bon TABLESPACE (sachant que je n'aurai pas de problème d'espace disque sur le destinationet que je pourrai réduire la taille des TABLESPACE après opération) ?
kryst est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2007, 14h25   #5
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
à mon avis c'est mieux en effet.

Tu peux faire un code PL/SQL du genre :
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
BEGIN
   FOR i IN (SELECT    'alter index '
                    || owner
                    || '.'
                    || index_name
                    || ' REBUILD TABLESPACE TS_INDEX' stmt,
                    owner, index_name
               FROM dba_indexes
              WHERE owner='User_New')
   LOOP
      BEGIN
         EXECUTE IMMEDIATE i.stmt;
      EXCEPTION
         WHEN OTHERS
         THEN
            DBMS_OUTPUT.put_line (   i.owner
                                  || '|'
                                  || i.index_name
                                  || '  =>  '
                                  || SQLERRM
                                 );
      END;
   END LOOP;
END;
/
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2007, 20h53   #6
Candidat au titre de Membre du Club
 
Inscription : octobre 2006
Messages : 35
Détails du profil
Informations personnelles :
Âge : 43
Localisation : France

Informations forums :
Inscription : octobre 2006
Messages : 35
Points : 12
Points : 12
Bonjour,
Citation:
Tu peux faire un code PL/SQL du genre : ...
Merci Fred pour la procédure que j'ai appliquée et qui a fonctionné sans aucun problème.
Mon seul souci est que Oracle ne veut pas que je récupère la place laissée par les INDEX dans le tablespace DATA.
Je fais des recherches mais si tu as une idée ?
kryst est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2007, 10h11   #7
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
il doit rester des objets recherche les lignes de dba_segments sur le tablespace.
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2007, 16h10   #8
Candidat au titre de Membre du Club
 
Inscription : octobre 2006
Messages : 35
Détails du profil
Informations personnelles :
Âge : 43
Localisation : France

Informations forums :
Inscription : octobre 2006
Messages : 35
Points : 12
Points : 12
Citation:
il doit rester des objets recherche les lignes de dba_segments sur le tablespace.
C'est tout à fait cela.
J'ai déplacé mes données dans un TABLESPACE temporaire, retailler mon TABLESPACE de données et fait la manipulation dans le sens inverse. Et pour finir, j'ai dû remettre dans l'état VALID tous les index qui étaient devenus UNUSABLE au cours de la manipulation.
Merci à tou(te)s de m'avoir aidé.
kryst 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 03h59.


 
 
 
 
Partenaires

Hébergement Web