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 04/04/2008, 15h33   #1
Responsable .NET
 
Avatar de tomlev
 
Homme Thomas Levesque
Développeur .NET
Inscription : février 2004
Messages : 16 779
Détails du profil
Informations personnelles :
Nom : Homme Thomas Levesque
Âge : 30
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur .NET
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2004
Messages : 16 779
Points : 26 798
Points : 26 798
Par défaut Le fichier UTL_FILE reste ouvert par Oracle

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:
[test@octopus] fuser /temp/monfichier.dat
/temp/monfichier.dat: 20925o 20917o 20909o 20903o 20899o
[test@octopus] ps -ef | egrep "(20925|20917|20909|20903|20899)"
oracle 18195 1 0 15:18:03 ? 0:01 ora_p000_MABASE
oracle 18203 1 0 15:18:03 ? 0:01 ora_p004_MABASE
oracle 18199 1 0 15:18:03 ? 0:01 ora_p002_MABASE
test 19208 5462 0 15:19:41 pts/39 0:00 egrep (18203|18201|18199|18197|18195)
oracle 18197 1 0 15:18:03 ? 0:01 ora_p001_MABASE
oracle 18201 1 0 15:18:03 ? 0:00 ora_p003_MABASE
D'après ce que j'ai vu sur Google, les processes ora_pxxx_MABASE sont liés au parallélisme (et ma requête d'extraction utilise effectivement un hint PARALLEL). Au bout de quelques instants (~2mn) ces processes s'arrêtent et le fichier est libéré. Mais je ne comprends pas pourquoi le fichier n'est pas fermé immédiatement quand je fais FCLOSE...

A titre indicatif, voilà le "squelette" du bloc PL/SQL (je n'ai pas le droit de mettre le code complet) :
Code PLSQL :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
DECLARE
	CURSOR mon_curseur IS
        SELECT   /*+ PARALLEL(CSC, 4) ... */
        ...;
BEGIN
	BEGIN
		-- Open extraction file
		V_FILE := UTL_FILE.FOPEN(V_FILE_DIR,V_FILE_NAME,'W');
	EXCEPTION
		...
	END;
 
	FOR rec IN mon_curseur
	LOOP
		BEGIN
			UTL_FILE.PUT_LINE(V_FILE, ...);
		EXCEPTION
			...
		END;
	END LOOP;
 
	UTL_FILE.FCLOSE(V_FILE);
END;

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...

Tutoriels : Les markup extensions en WPF - La sérialisation XML avec .NET (Aller plus loin) - Une visite guidée de WPF (traduction)
Projet : Dvp.NET, la librairie .NET open-source des membres de Developpez !

Envie de contribuer à la rubrique .NET ?
tomlev est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2008, 15h54   #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
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
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2008, 16h15   #3
Responsable .NET
 
Avatar de tomlev
 
Homme Thomas Levesque
Développeur .NET
Inscription : février 2004
Messages : 16 779
Détails du profil
Informations personnelles :
Nom : Homme Thomas Levesque
Âge : 30
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur .NET
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2004
Messages : 16 779
Points : 26 798
Points : 26 798
Citation:
Envoyé par orafrance Voir le message
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
J'ai vérifié en mettant un DBMS_OUTPUT, le FCLOSE est bien exécuté
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...

Tutoriels : Les markup extensions en WPF - La sérialisation XML avec .NET (Aller plus loin) - Une visite guidée de WPF (traduction)
Projet : Dvp.NET, la librairie .NET open-source des membres de Developpez !

Envie de contribuer à la rubrique .NET ?
tomlev est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2008, 19h23   #4
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
Citation:
Envoyé par tomlev Voir le message
PS: il y a bien un bloc d'exception global, je ne l'ai juste pas mis dans mon post...
faut mettre le FCLOSE dedans alors...
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2008, 20h01   #5
Responsable .NET
 
Avatar de tomlev
 
Homme Thomas Levesque
Développeur .NET
Inscription : février 2004
Messages : 16 779
Détails du profil
Informations personnelles :
Nom : Homme Thomas Levesque
Âge : 30
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur .NET
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2004
Messages : 16 779
Points : 26 798
Points : 26 798
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...

Tutoriels : Les markup extensions en WPF - La sérialisation XML avec .NET (Aller plus loin) - Une visite guidée de WPF (traduction)
Projet : Dvp.NET, la librairie .NET open-source des membres de Developpez !

Envie de contribuer à la rubrique .NET ?
tomlev est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2008, 20h41   #6
Responsable .NET
 
Avatar de tomlev
 
Homme Thomas Levesque
Développeur .NET
Inscription : février 2004
Messages : 16 779
Détails du profil
Informations personnelles :
Nom : Homme Thomas Levesque
Âge : 30
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur .NET
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2004
Messages : 16 779
Points : 26 798
Points : 26 798
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...

Tutoriels : Les markup extensions en WPF - La sérialisation XML avec .NET (Aller plus loin) - Une visite guidée de WPF (traduction)
Projet : Dvp.NET, la librairie .NET open-source des membres de Developpez !

Envie de contribuer à la rubrique .NET ?
tomlev est actuellement 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 23h32.


 
 
 
 
Partenaires

Hébergement Web