2009-07-30 21 views
1

Nous essayons de trouver la meilleure façon de gérer les INSULES en vrac en utilisant Oracle (10gR2), et je trouve que cela peut être un sujet assez compliqué. Une méthode que j'ai trouvé consiste à utiliser l'indicateur d'optimiseur Append:Est-ce que l'insertion de chemin direct est un bon moyen de faire des insertions en masse dans Oracle?

INSERT /*+ Append*/ 
INTO some_table (a, b) 
VALUES (1, 2) 

Ma compréhension est que cela dire Oracle d'ignorer les index et il suffit de mettre les résultats à la fin de la table. Alors, tout ce que je devrais faire est de reconstruire les index:

ALTER INDEX some_index REBUILD 

Ce serait plus facile que d'essayer de lancer SQL * Loader comme un processus externe ou de faire une pl/SQL. Cela semble presque trop facile. Y a-t-il quelque chose qui me manque? Des choses qui pourraient revenir me mordre si je prends cette approche?

Répondre

2

Quelques notes ...

  1. Une seule ligne ne peut pas être ajoutée, donc APPEND est valable uniquement avec INSERT INTO ... SELECT de la syntaxe.
  2. Un append est l'ajout de données au-dessus de la ligne des hautes eaux de la table, dans laquelle les données sont formatées en blocs complets qui sont ensuite écrits dans la table et qui ignorent le moteur SQL. que chaque thread de requête parallèle alloue au moins une nouvelle extension à la table, dans laquelle les nouveaux blocs sont écrits. Cela peut être un gaspillage d'espace.
  3. Les index ne sont pas ignorés, mais leur maintenance est différée jusqu'à ce que les blocs aient été écrits dans la table.

Voir il docs pour des informations plus importantes: http://download.oracle.com/docs/cd/B19306_01/server.102/b14231/tables.htm#ADMIN01509

+2

Insérer/* + append */réduit l'enregistrement, donc bewrare si vous comptez sur les journaux pour la sauvegarde/réplication http: //www.pythian. com/news/1209/comment-trouver-objets-créer-nologging-changements –

+0

Pas tout à fait vrai, Gary. Le nologging ne s'applique qu'aux insertions effectuées en mode Direct Path, mais les inserts Direct Path peuvent toujours être journalisés. http://download.oracle.com/docs/cd/B19306_01/server.102/b14231/tables.htm#sthref2251 –