|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |||
![]() ![]() Thomas LevesqueDéveloppeur .NET Inscription : février 2004 Messages : 16 779 ![]() |
Salut,
J'ai un problème assez étrange... j'ai un script d'extraction basé sur un bloc PL/SQL qui écrit dans un fichier avec UTL_FILE. Ensuite, le fichier est envoyé à une autre machine par un script ksh. Avant d'envoyer le fichier, le script vérifie qu'il n'est pas ouvert par un autre process, en utilisant fuser. Or, apparemment il reste ouvert par Oracle, malgré le UTL_FILE.FCLOSE : Citation:
A titre indicatif, voilà le "squelette" du bloc PL/SQL (je n'ai pas le droit de mettre le code complet) : Code PLSQL :
Connaissez-vous un moyen de régler ce problème ? Ne pas utiliser le parallélisme n'est pas acceptable en terme de performances...
__________________
Pas de questions techniques par MP ! Le forum est là pour ça... |
|||
|
00
|
|
|
#2 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
UTL_FILE.FCLOSE(V_FILE), s'exécute bien-t-il à chaque fois ? Parce qu'en cas d'erreur par exemple c'est pas le cas puisqu'il n'y a pas d'exception générale
|
|
|
00
|
|
|
#3 | |
![]() ![]() Thomas LevesqueDéveloppeur .NET Inscription : février 2004 Messages : 16 779 ![]() |
Citation:
En plus maintenant l'erreur ne se produit plus, alors qu'elle se produisait à chaque fois tout à l'heure... Je suis vraiment largué là ! PS: il y a bien un bloc d'exception global, je ne l'ai juste pas mis dans mon post...
__________________
Pas de questions techniques par MP ! Le forum est là pour ça... |
|
|
00
|
|
|
#4 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
faut mettre le FCLOSE dedans alors...
|
|
|
00
|
|
|
#5 |
![]() ![]() Thomas LevesqueDéveloppeur .NET Inscription : février 2004 Messages : 16 779 ![]() |
Ca ne change rien, l'exécution ne passe jamais dedans...
Par contre j'ai pensé à un truc... je ne sais pas exactement comment fonctionne le parallélisme d'Oracle en interne, mais je suppose que ça implique des fork... et si mes souvenirs sont bons, le process fils résultant d'un fork hérite des descripteurs de fichiers du père. Donc, si j'ouvre le fichier après le fork (donc après l'ouverture du curseur), les process fils n'auront pas le descripteur, ce qui devrait résoudre le problème... enfin j'espère ! Je vais essayer en tous cas...
__________________
Pas de questions techniques par MP ! Le forum est là pour ça... |
|
00
|
|
|
#6 |
![]() ![]() Thomas LevesqueDéveloppeur .NET Inscription : février 2004 Messages : 16 779 ![]() |
C'était bien ça ! Pour une requête parallèle, il faut ouvrir le curseur avant d'ouvrir le fichier, sinon les process qui exécutent la requête héritent du descripteur, et comme ils ne se terminent pas tout de suite le fichier reste ouvert...
__________________
Pas de questions techniques par MP ! Le forum est là pour ça... |
|
00
|
Copyright © 2000-2012 - www.developpez.com