Bonjour,
Pour les besoins de mon applications, je dois extraire d'une base Oracle certaines données sous forme de fichier plat. Pour recupérer ces données, j'ai besoin de faire une jointure entre deux tables mais qui contiennent chacune plus de 3 Millions d'enregistrements et j'obtient l'erreur ORA-04030 (impossible d'allouer plus de mémoire) à chaque fois . Je pensais contourner le problème d'une autre manière:
J'ai la possibilité de diviser les données de la table 1 en sous-ensembles qui sont définis dans une autre table et ainsi d'effectuer la jointure pour chaque sous-ensemble évitant ainsi de saturer le système (je sais que les sous-ensembles ne peuvent pas dépasser un certain nombre d'élément).
Je me poser alors la question de comment procéder :
1. J'extrait les sous-ensemble à l'aide d'un script sql et je les spool dans un fichier. A l'aide d'un shell je parcours ensuite ce fichier et pour chaque sous-ensemble, j'execute ma requête sql "métier" qui spool les résultats dans un fichier en lui passant en paramètre le sous-ensemble.
2. J'écrit un petit bout de pl/sql qui fait les actions suivantes :
- Recupère les sous-ensembles
- Pour chaque sous-ensemble, effectue une requête bulkée dans un tableau
- Parcours ensuite le tableau et spool dans un fichier à l'aide de UTL_FILE
Pour le moment, je vais essayer la deuxième solution qui me parait plus propre.
Qu'en pensez-vous
Merci d'avance
Partager