powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как правильно запустить xp_cmdshell в курсоре?
9 сообщений из 9, страница 1 из 1
Как правильно запустить xp_cmdshell в курсоре?
    #39873940
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня всем!

Есть курсор, в котором запускается xp_cmdshell (вызов программы, которая выполняет некие действия и записывает информацию в таблицу - журнал). Смотрю таблицу и вижу, что момент запуска программы опережает момент предыдущего окончания:


line Action duration dateBegin RequestSendTime RequestResponceTimeline: 1 Action duration: dateBegin=09.10.2019 12:29:15 RequestSendTime =09.10.2019 12:29:15 RequestResponceTime =09.10.2019 12:29:15line: 2 Action duration: dateBegin=09.10.2019 12:29:15 RequestSendTime =09.10.2019 12:29:16 RequestResponceTime =09.10.2019 12:29:17line: 3 Action duration: dateBegin=09.10.2019 12:29:15 RequestSendTime =09.10.2019 12:29:16 RequestResponceTime =09.10.2019 12:29:17line: 4 Action duration: dateBegin=09.10.2019 12:29:15 RequestSendTime =09.10.2019 12:29:16 RequestResponceTime =09.10.2019 12:29:17line: 5 Action duration: dateBegin=09.10.2019 12:29:17 RequestSendTime =09.10.2019 12:29:18 RequestResponceTime =09.10.2019 12:29:18line: 6 Action duration: dateBegin=09.10.2019 12:29:17 RequestSendTime =09.10.2019 12:29:18 RequestResponceTime =09.10.2019 12:29:18line: 7 Action duration: dateBegin=09.10.2019 12:29:18 RequestSendTime =09.10.2019 12:29:19 RequestResponceTime =09.10.2019 12:29:19line: 8 Action duration: dateBegin=09.10.2019 12:29:18 RequestSendTime =09.10.2019 12:29:19 RequestResponceTime =09.10.2019 12:29:19line: 9 Action duration: dateBegin=09.10.2019 12:29:19 RequestSendTime =09.10.2019 12:29:19 RequestResponceTime =09.10.2019 12:29:20line:10 Action duration: dateBegin=09.10.2019 12:29:19 RequestSendTime =09.10.2019 12:29:19 RequestResponceTime =09.10.2019 12:29:20

Т.е. В Line 3 и 4 записано, что начало выполнения программы для соответствующих итераций (12:29:15) началось раньше, чем закончилось исполнение программы на шаге 2 (12:29:17).
Обработка для Line 6 началась раньше чем закончилась обработка Line 5.
И т.п.

То есть получается множественный (я бы НЕ сказал многопоточный) одновременный запуск одного и того же внешнего приложения из курсора .

Где про это можно прочитать?
И как с этим бороться?

Правильно ли будет использовать задержку, например, на 3 секунды: WAITFOR DELAY '00:00:03'; ?


--------------------------
Microsoft SQL Server 2012 - 11.0.5058.0 (X64) May 14 2014 18:34:29 Copyright (c) Microsoft Corporation Standard Edition (64-bit)
...
Рейтинг: 0 / 0
Как правильно запустить xp_cmdshell в курсоре?
    #39873945
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_Доброго дня всем!

Есть курсор, в котором запускается xp_cmdshell (вызов программы, которая выполняет некие действия и записывает информацию в таблицу - журнал). Смотрю таблицу и вижу, что момент запуска программы опережает момент предыдущего окончания:


line Action duration dateBegin RequestSendTime RequestResponceTimeline: 1 Action duration: dateBegin=09.10.2019 12:29:15 RequestSendTime =09.10.2019 12:29:15 RequestResponceTime =09.10.2019 12:29:15line: 2 Action duration: dateBegin=09.10.2019 12:29:15 RequestSendTime =09.10.2019 12:29:16 RequestResponceTime =09.10.2019 12:29:17line: 3 Action duration: dateBegin=09.10.2019 12:29:15 RequestSendTime =09.10.2019 12:29:16 RequestResponceTime =09.10.2019 12:29:17line: 4 Action duration: dateBegin=09.10.2019 12:29:15 RequestSendTime =09.10.2019 12:29:16 RequestResponceTime =09.10.2019 12:29:17line: 5 Action duration: dateBegin=09.10.2019 12:29:17 RequestSendTime =09.10.2019 12:29:18 RequestResponceTime =09.10.2019 12:29:18line: 6 Action duration: dateBegin=09.10.2019 12:29:17 RequestSendTime =09.10.2019 12:29:18 RequestResponceTime =09.10.2019 12:29:18line: 7 Action duration: dateBegin=09.10.2019 12:29:18 RequestSendTime =09.10.2019 12:29:19 RequestResponceTime =09.10.2019 12:29:19line: 8 Action duration: dateBegin=09.10.2019 12:29:18 RequestSendTime =09.10.2019 12:29:19 RequestResponceTime =09.10.2019 12:29:19line: 9 Action duration: dateBegin=09.10.2019 12:29:19 RequestSendTime =09.10.2019 12:29:19 RequestResponceTime =09.10.2019 12:29:20line:10 Action duration: dateBegin=09.10.2019 12:29:19 RequestSendTime =09.10.2019 12:29:19 RequestResponceTime =09.10.2019 12:29:20

Т.е. В Line 3 и 4 записано, что начало выполнения программы для соответствующих итераций (12:29:15) началось раньше, чем закончилось исполнение программы на шаге 2 (12:29:17).
Обработка для Line 6 началась раньше чем закончилась обработка Line 5.
И т.п.

То есть получается множественный (я бы НЕ сказал многопоточный) одновременный запуск одного и того же внешнего приложения из курсора
.


Где про это можно прочитать?
И как с этим бороться?

Правильно ли будет использовать задержку, например, на 3 секунды: WAITFOR DELAY '00:00:03'; ?


--------------------------
Microsoft SQL Server 2012 - 11.0.5058.0 (X64) May 14 2014 18:34:29 Copyright (c) Microsoft Corporation Standard Edition (64-bit)


xp_cmdshell - синхронный
xp_cmdshell работает синхронно. Управление не возвращается участнику до завершения команды ядра.


Либо ошибка в заполнении вашего лога
Либо ваш код выполняется в нескольких сессиях
...
Рейтинг: 0 / 0
Как правильно запустить xp_cmdshell в курсоре?
    #39873946
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, часом, там не xp_cmdshell 'start ...' написано?
...
Рейтинг: 0 / 0
Как правильно запустить xp_cmdshell в курсоре?
    #39873958
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex, маловероятно. В лог фиксируется время запуска, время отправки запроса и время получения ответа от сервера. Эти данные вспомогательная программа сама кидает в лог (выполняется UPDATE таблицы лога с привязкой к полю, которое является первичным ключом этой таблицы).
...
Рейтинг: 0 / 0
Как правильно запустить xp_cmdshell в курсоре?
    #39873960
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей АлексеевичА, часом, там не xp_cmdshell 'start ...' написано?
нет :
Код: sql
1.
2.
select @cmd = '"c:\myFolder\doSomething.exe" ' + 'confirm' + SPACE(1) + .... ' '; 
execute xp_cmdshell @cmd;
...
Рейтинг: 0 / 0
Как правильно запустить xp_cmdshell в курсоре?
    #39873970
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_Гавриленко Сергей АлексеевичА, часом, там не xp_cmdshell 'start ...' написано?
нет :
Код: sql
1.
2.
select @cmd = '"c:\myFolder\doSomething.exe" ' + 'confirm' + SPACE(1) + .... ' '; 
execute xp_cmdshell @cmd;




Добавьте логирование в TSQL скрипт (обычный insert getdate() + @@spid + параметры до и после xp_cmdshell), и все сразу станет ясно
...
Рейтинг: 0 / 0
Как правильно запустить xp_cmdshell в курсоре?
    #39873972
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_,

это может быть из-за ошибки округления времени при записи в журнал.
...
Рейтинг: 0 / 0
Как правильно запустить xp_cmdshell в курсоре?
    #39873973
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_,

используйте тип datetime2.
...
Рейтинг: 0 / 0
Как правильно запустить xp_cmdshell в курсоре?
    #39873995
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав КолосовSIMPLicity_,

используйте тип datetime2.

В журнал пишет утилита, C#, вставляется переменная, которая = DateTime.Now.ToString();
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как правильно запустить xp_cmdshell в курсоре?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]