2010-11-19 25 views
1

Ma question concerne la situation où l'espace table utilisé pour l'index de clé primaire diffère de l'espace table utilisé pour la table elle-même. Oracle utilisera-t-il cet index ou devient-il inutilisable? Parce que quand j'ai essayé d'importer le schéma à Oracle qui contient cette table. Oracle s'est plaint d'avertissement disant que l'index pour cette clé primaire est inutilisable. J'ai corrigé le schéma en modifiant l'espace de table pour l'index de clé primaire, l'ai exporté à nouveau et l'a importé dans la base de données sans avertissement. Cela signifie-t-il que l'espace de table d'index de clé primaire doit toujours être le même que l'espace de table de la table elle-même? Ou est-ce vrai pour tout type d'index (index de colonne par exemple)?Oracle Database différent tablespace pour l'index

Cette règle s'applique-t-elle également à DB2?

Répondre

4

Le stockage d'index et de données dans différents espaces de table est parfaitement acceptable. Que se passe-t-il lorsque vous effectuez un:

alter index index_name rebuild; 

L'index est-il toujours inutilisable après cela? Sinon, vérifiez vos paramètres d'importation sur la table. Par exemple, SQL * Loader peut invalider les index avec des charges de chemin d'accès direct (c'est juste une supposition, vous ne mentionnez pas comment vous avez chargé les données).

Si l'index est encore inutilisable, vérifiez les anomalies de données, en particulier les clés en double. J'espère que vous le réparer!

+0

La reconstruction d'index a fait l'affaire. merci pour l'astuce – Troydm

+0

Pour DB2, stocker des index et des tables dans différents espaces de table ne pose pas de problème non plus. Cependant, dans la plupart des cas, vous devez spécifier l'espace table d'index au moment de la création de la table. –

3

Ce que Martin a dit est bien. Cependant, il n'y a aucun besoin réel de séparer les espaces de table. Ce que vous pouvez faire, pour éviter les erreurs d'espace de table lors de l'importation (en supposant que vous utilisez export/import et pas datapump), est de créer l'utilisateur avec un espace de table par défaut qui existe. Importez ensuite uniquement la base de données, puis ajoutez les index et les contraintes.

+0

en fait j'ai utilisé datapump – Troydm

+1

Si vous utilisez datapump vous pouvez simplement mapper ces espaces de table (avant: après) – erbsock