При вызове хранимой процедуры из веб-приложения в UNIX выдается ошибка в xp_cmdshell - PullRequest
1 голос
/ 14 января 2009

Привет всем, я вырываю свои волосы на этом.

Я проверил все свои разрешения как на сервере базы данных (SQL Server 2000), так и в файловой системе, чтобы убедиться, что то, что я пытаюсь сделать, должно быть возможным. Вот ситуация:

У меня есть веб-приложение Java EE, работающее на сервере Tomcat во внутренней сети моей компании. Короче говоря, это приложение сокращает числа, создает файл записей с разделителями каналов, который ДОЛЖНО ВСТАВЛЯЕТСЯ в нашу базу данных, и сохраняет файл на сервере UNIX.

Затем вызывается хранимая процедура, которая использует xp_cmdshell для передачи по FTP файла из UNIX в нашу коробку Windows SQL Server для БОЛЬШОЙ ВСТАВКИ файла. Когда я вызываю эту хранимую процедуру (вошел в систему как пользователь tomcat, с которого мы запускаем наше веб-приложение) из Management Studio, не возникает ни одной ошибки, и FTP передает, и файл загружается.

Это та часть, которая меня раздражает.

Когда приложение Java EE вызывает эту хранимую процедуру, оно на самом деле передает файл по FTP в ящик SQL Server, но я получаю исключение SQLServerException даже в случае успеха. Нет рифмы или причины. НО ... несмотря на то, что выдается исключение, мой файл попадает на сервер все красиво и уютно.

Есть ли у SQL Server проблема с запуском xp_cmdshell с сервера UNIX (как бы странно это ни звучало для меня, поскольку все, что делает программа, это вызывает хранимую процедуру, я все еще в офисе в 23:55 во вторник) ночь, так что я думаю, что нет ничего смешного ...)

Любое понимание было бы замечательно ...

EDIT:

Кроме того, я просматривал трафик на SQL Server с помощью SQL Profiler ... и я вижу фактическое утверждение, которое я использую для вызова хранимой процедуры. Когда я копирую это в SQL Server Management Studio и выполняю его, используя свои учетные данные пользователя Tomcat, оно выполняется безупречно ...

1 Ответ

1 голос
/ 14 января 2009

Ничего себе. Вот почему не хорошо кодировать вещи в 11 часов вечера.

xp_cmdshell возвращает набор результатов при каждом выполнении. Это в основном дает вам вывод из командной строки, как вы могли бы видеть в командной строке. Ключевым моментом здесь является набор результатов.

Методом JDBC, который я вызывал для вызова хранимой процедуры, была IssUpdate (), которая выдавала исключение в возвращенном наборе результатов xp_cmdshell. Когда я переключился на issueQuery (), я не получил исключение, и остальная часть моего кода была выполнена до завершения.

Я думаю, у меня есть работа, чтобы очистить это, но я удовлетворен этим решением.

...