2009-01-14 4 views
1

Salut à tous, je tire mes cheveux sur celui-ci.Appel d'une procédure stockée à partir d'une application Web sur une erreur de lancement UNIX sur xp_cmdshell

J'ai vérifié toutes mes permissions, à la fois sur le serveur de base de données (SQL Server 2000) et sur le système de fichiers pour m'assurer que ce que j'essaie de faire devrait être possible. Voici la situation:

J'ai une application Web Java EE fonctionnant sur un serveur Tomcat sur l'intranet de mon entreprise. Pour résumer, cette application regroupe des nombres, crée un fichier d'enregistrements délimité par des barres à insérer dans notre base de données et enregistre le fichier sur le serveur UNIX.

Ensuite, une procédure stockée est appelée qui utilise xp_cmdshell pour FTP le fichier d'UNIX à notre boîte Windows SQL Server afin de BULK INSERT le fichier. Lorsque j'appelle cette procédure stockée (connecté en tant qu'utilisateur Tomcat à partir duquel nous exécutons notre application Web) à partir de Management Studio, il n'y a pas une seule erreur et les transferts FTP, et le fichier est chargé.

C'est la partie qui m'aggrave. Lorsque l'application Java EE appelle cette procédure stockée, elle FTP le fichier dans la zone SQL Server, mais je finis avec une exception SQLServerException même en cas de succès. Pas de rime ni de raison. MAIS ... même si l'exception est levée, mon fichier se retrouve sur le serveur tout agréable et confortable. Est-ce que SQL Server a un problème avec l'exécution de xp_cmdshell à partir d'un serveur UNIX (aussi ridicule que cela puisse paraître, puisque tout ce que le programme fait est d'appeler une procédure stockée, je suis toujours au bureau à 23h55 sur un mardi soir, donc je suppose que rien est trop ridicule ...)

Toute idée serait génial ...

EDIT:

aussi, j'ai regardiez le trafic vers SQL Server à l'aide de profils SQL ... et je peux voir la déclaration que j'utilise pour appeler la procédure stockée. Lorsque je le copie dans SQL Server Management Studio et l'exécute à l'aide de mes informations d'identification d'utilisateur tomcat, il s'exécute parfaitement ...

Répondre

1

Wow. C'est pourquoi il n'est pas bon de coder les choses à 23h. Xp_cmdshell renvoie un jeu de résultats à chaque exécution. Il vous donne essentiellement la sortie de la ligne de commande comme vous le verriez à une invite de commande. La clé ici est l'ensemble des résultats.

La méthode JDBC que j'appelais pour appeler la procédure stockée était issueUpdate(), qui lançait une exception sur l'ensemble de résultats renvoyé de xp_cmdshell. Lorsque je suis passé à questionQuery(), je n'ai pas reçu l'exception et le reste de mon code a été exécuté jusqu'à la fin.

Je pense que j'ai du travail à faire pour nettoyer cela, mais je suis satisfait de cette solution.

Questions connexes