IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration Oracle Discussion :

Preprocessor batch sur table externe non executé, quels "settings" faut il?


Sujet :

Administration Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut Preprocessor batch sur table externe non executé, quels "settings" faut il?
    Bonjour,

    Sur un Windows server 2016, nous avons une base Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production.
    Nous avons essayé à la lettre la création d'une table externe avec commande preprocessor, qui lance un batch afin de faire un "dir" et de récupérer les infos des fichiers dans un répertoire (taille, date, etc), comme décrit ici:
    http://www.oracle-developer.net/display.php?id=513
    Sur un serveur de test nous appartenant, cela fonctionne du premier coup.
    Sur le Windows server 2016, le batch ne semble pas executé. Aucun message d'erreur, mais lors du "select" sur la table externe, aucune ligne renvoyée.
    Pas d'erreur dans les fichiers de log de la table externe.
    Les dossiers dans lesquels nous avons placé le batch, et fichiet .txt, etc... ont tous des droits pour l'utilisateur ayant créé la base Oracle.

    Qu'est ce qui ne va pas? Qu'est ce qu'on oublie?

    Note: j'ai modifié le batch afin qu'il renvoie sont résultat dans un fichier texte. Une fois lancé via cmd, le fichier est bien créé. Mais rien lorsque je fais le "select" sur la table.

    Une idée?
    Merci !

  2. #2
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut
    Salut,

    Sur le server "Windows server 2016", est-ce que, dans le répertoire qui t'intéresse, il y a bien des fichiers?
    C'est bête mais ton SELECT ne renvoie peut-être rien car ta table externe est vide puisque le répertoire lui même est vide et donc ton fichier est vide?

    Au fait, tu ne nous parles pas de ton serveur de test où ça marche : c'est aussi un "Windows server 2016"?

    Comme test, je te propose la chose suivante : faire sauter la partie preprocessor et de créer une table externe basique, SANS préprocessor, lisant un fichier .txt contenant une ou deux lignes bidon.
    Si ton SELECT renvoie des lignes, c'est alors la partie preprocessor qui plante. Sinon... il faut voir ailleurs :-)
    J'avais fais un article ici avec le listener.ora : http://dbaoraclesql.canalblog.com/ar.../37518003.html

  3. #3
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonjour,

    Merci pour la réponse.
    Effectivement, je suis bien capable de créer une table externe qui renvoie bien des lignes, avec un fichier dans les mêmes répertoires.
    Aussi, si je m'amuse a indiquer à la table externe un nom de fichier .bat qui n'existe pas dans la commande Preprocessor, un select statement sur la table plante et indique clairement l'erreur.
    J'aurais tendance a dire donc que Oracle peut accèder aux répertoires mais ne peut pas lancer un .bat, est-ce que cela est correct?
    A quel niveau résoudre?

    Edit: j'ai oublié -> l'autre serveur que j'ai mentionné sur lequel le test tourne est une Windows server 2012

    @+

  4. #4
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut
    Quand tu dis "J'aurais tendance à dire donc qu'Oracle peut accéder aux répertoires, mais ne peut pas lancer un .bat" je ne suis pas d'accord puisque, dans le lien donné dans ton premier message, le DBA utilise bien un .bat.

    Autre piste : plutôt que de lancer ton .bat via Oracle, est-ce que tu peux le lancer manuellement?
    De la sorte, on verra s'il remplit bien ton fichier?
    S'il est vide... c'est ton .bat qui pose pb.
    Si le fichier est rempli... alors là, ça veut dire que Oracle ne peut pas lire le contenu de ton fichier et que c'est peut-être la définition de la table qui pose pb (la table externe pointe vers le bon fichier .txt?).

  5. #5
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonjour,

    Désolé de la réponse tardive, mais déplacement pro, etc...
    Donc pour le moment, j'ai résolu en contournant le problème. Il faut bien que je trouve une solution, car je dois vraiment avancer.
    J'ai testé que je pouvais bien executer un batch via "dbms_scheduler.create_job" (c'est amusant d'ailleurs, car le batch est exactement au même endroit que celui que j'essayai de lancer via la table externe et "preprocessor").
    Donc, je me créé dynamiquement un batch via UTL_FILE, basé sur des infos dans une table de "définition". Ca corresponds a mon besoin.
    Ensuite je lance le batch via "dbms_scheduler.create_job", et ce batch me renvoie les résultats des commandes "dir" dans un fichier texte. Ce fichier texte est lu par une table externe.
    Le tout tiens dans une petite procédure, et je vais pouvoir catcher les erreurs / "logger" les étapes, donc ca me plait bien.
    Fin du problème, normalement.

    Je ne sais pas si je cloture ce topic, ou bien si je laisse ouvert au cas ou finalement j'ai le temps de revenir la dessus (parce que je suis têtu et que j'aimerais bien comprendre pourquoi ce truc avec la table externe ne fonctionne pas pour moi).
    Je vais laisser ouvert, et si un modo pense qu'il faut fermer, pas de souci.

    @Ikebukuro:
    Merci pour tes réponses.
    Autre piste : plutôt que de lancer ton .bat via Oracle, est-ce que tu peux le lancer manuellement?
    Oui, oui, tout fonctionne dans ce cas.

    Si le fichier est rempli... alors là, ça veut dire que Oracle ne peut pas lire le contenu de ton fichier et que c'est peut-être la définition de la table qui pose pb (la table externe pointe vers le bon fichier .txt?).
    Oui, la table externe pointait vers le bon .txt et le bon .batch (pour cette commande "preprocessor").

    Le truc "bizarre" étant que je suis bien capable de lancer le batch via "dbms_scheduler.create_job" mais que dans le contexte de la table externe + preprocessor, ça ne fonctionne pas.
    Bien étrange ...

    @+

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/10/2011, 16h44
  2. erreurs Oracle sur table externe
    Par Djene dans le forum Oracle
    Réponses: 3
    Dernier message: 10/10/2011, 16h29
  3. Requête sur table liée non nulle
    Par MistyMan dans le forum Requêtes
    Réponses: 4
    Dernier message: 06/02/2009, 12h44
  4. etat sur une table externe non liée
    Par Eruil dans le forum IHM
    Réponses: 0
    Dernier message: 10/06/2008, 10h21
  5. [10g] ora-29829 sur table externe
    Par luchot dans le forum Oracle
    Réponses: 18
    Dernier message: 07/03/2006, 15h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo