Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проблема выполнения джоба  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 506
Добрый день.
При выполнении SP происходит такая ошибка

Не удалось определить метаданные, поскольку инструкция "EXECUTE master.dbo.xp_sqlagent_is_starting @retval OUTPUT" в процедуре "sp_is_sqlagent_starting" вызывает расширенную хранимую процедуру.

Подскажите,в чем может быть проблема..
11 дек 19, 16:48    [22037945]     Ответить | Цитировать Сообщить модератору
 Re: Проблема выполнения джоба  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 506
Вызываю

   Select @execution_status = 0  
   Select @S = 'SELECT @execution_status = a.current_execution_status  
   FROM OPENROWSET(''SQLNCLI'', ''Server=localhost;Trusted_Connection=yes;'',   
   ''exec msdb.dbo.sp_help_job @job_name = ''''no_job|' + RTRIM(@working_job) + ''''' '') a '  
  
   SET @ParmDefinition = N'@execution_status int OUTPUT'  
   EXEC sp_executesql @S  ,@ParmDefinition , @execution_status = @execution_status OUTPUT


Сообщение было отредактировано: 11 дек 19, 17:39
11 дек 19, 17:34    [22037979]     Ответить | Цитировать Сообщить модератору
 Re: Проблема выполнения джоба  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4730
Максим Александровитч,


Проверьте, у вас вообще работает LinkedServer (Server=localhost;Trusted_Connection=yes;). Может просто доступ закрыли

Сообщение было отредактировано: 11 дек 19, 17:49
11 дек 19, 17:48    [22037994]     Ответить | Цитировать Сообщить модератору
 Re: Проблема выполнения джоба  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
это значит, что версия сервера >= 2012
и что надо указать WITH RESULT SETS
для OPENROWSET
11 дек 19, 17:58    [22038001]     Ответить | Цитировать Сообщить модератору
 Re: Проблема выполнения джоба  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 506
a_voronin
Максим Александровитч,


Проверьте, у вас вообще работает LinkedServer (Server=localhost;Trusted_Connection=yes;). Может просто доступ закрыли


Я наверное не понимаю..вижу,что Openrowset для линка,но указан Localhost..т.е. это локальный сервер же?
11 дек 19, 18:55    [22038036]     Ответить | Цитировать Сообщить модератору
 Re: Проблема выполнения джоба  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 506
Yasha123
это значит, что версия сервера >= 2012
и что надо указать WITH RESULT SETS
для OPENROWSET


Да,
Microsoft SQL Server 2016 (SP2-GDR) (KB4505220) - 13.0.5101.9 (X64) Jun 15 2019 23:15:58 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows Server 2016 Standard 10.0 <X64> (Build 14393: ) (Hypervisor)
11 дек 19, 18:59    [22038038]     Ответить | Цитировать Сообщить модератору
 Re: Проблема выполнения джоба  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7762
Максим Александровитч,

что Вы хотите сделать при помощи процедуры, которую не должны использовать? Для чего эта информация нужна?
11 дек 19, 19:00    [22038039]     Ответить | Цитировать Сообщить модератору
 Re: Проблема выполнения джоба  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 506
Владислав Колосов,

Запуск джоба,имеющего некое название #_job|..
11 дек 19, 19:10    [22038045]     Ответить | Цитировать Сообщить модератору
 Re: Проблема выполнения джоба  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 506
Сделал линк сам на себя.
В итоге
Этот запрос отрабатывает

select id, val as MyVal, dt from openrowset ( 'SQLNCLI'
, 'Server=(local);Trusted_Connection=yes;'
, 'exec msdb.dbo.Proc01'
)


Этот нет

SELECT execution_status = a.current_execution_status


FROM OPENROWSET('SQLNCLI', 'Server=(local);Trusted_Connection=yes;', 'exec msdb.dbo.sp_help_job @job_name = ''JOB'' ') a

сообщение: 11520, уровень: 16, состояние: 1, процедура: sp_describe_first_result_set, строка: 1 [строка начала пакета: 67]
Не удалось определить метаданные, поскольку инструкция "EXECUTE master.dbo.xp_sqlagent_is_starting @retval OUTPUT" в процедуре "sp_is_sqlagent_starting" вызывает расширенную хранимую процедуру.


В чем проблема может быть?
11 дек 19, 21:33    [22038146]     Ответить | Цитировать Сообщить модератору
 Re: Проблема выполнения джоба  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
Максим Александровитч
Запуск джоба,имеющего некое название #_job|..
Запуск джоба процедурой sp_help_job? Однако.
11 дек 19, 21:34    [22038147]     Ответить | Цитировать Сообщить модератору
 Re: Проблема выполнения джоба  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 506
alexeyvg
Максим Александровитч
Запуск джоба,имеющего некое название #_job|..
Запуск джоба процедурой sp_help_job? Однако.


Однако юмор..допустим не вызов джоба,а инфо по нему..меняет ли это суть моей проблемы?
Отнюдь.
11 дек 19, 21:40    [22038148]     Ответить | Цитировать Сообщить модератору
 Re: Проблема выполнения джоба  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
Максим Александровитч
alexeyvg
пропущено...
Запуск джоба процедурой sp_help_job? Однако.


Однако юмор..допустим не вызов джоба,а инфо по нему..меняет ли это суть моей проблемы?
Отнюдь.
Меняет.
Для получения инфы по нему можно обратиться к системным таблицам (представлениям), притом документированным ничуть не хуже sp_help_job, и использование которых будет несравнимо надёжней (потому что в вывод sp_help_job добавят столбец, и абзац вашему коду).
11 дек 19, 21:44    [22038152]     Ответить | Цитировать Сообщить модератору
 Re: Проблема выполнения джоба  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
alexeyvg
и абзац вашему коду
В смысле, если описывать поля для INSERT ... EXEC
11 дек 19, 21:46    [22038157]     Ответить | Цитировать Сообщить модератору
 Re: Проблема выполнения джоба  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 506
alexeyvg
Максим Александровитч
пропущено...


Однако юмор..допустим не вызов джоба,а инфо по нему..меняет ли это суть моей проблемы?
Отнюдь.
Меняет.
Для получения инфы по нему можно обратиться к системным таблицам (представлениям), притом документированным ничуть не хуже sp_help_job, и использование которых будет несравнимо надёжней (потому что в вывод sp_help_job добавят столбец, и абзац вашему коду).


Хм..вариант,хотя я нашел выход из ситуации,но крайне геморрный..
А из каких представлений можно получить?
current_execution_status
11 дек 19, 21:49    [22038160]     Ответить | Цитировать Сообщить модератору
 Re: Проблема выполнения джоба  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 506
Хотя найду..спс за идею,но пробелму-то мою не решит это..
11 дек 19, 21:55    [22038166]     Ответить | Цитировать Сообщить модератору
 Re: Проблема выполнения джоба  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
Максим Александровитч
А из каких представлений можно получить?
current_execution_status
Вообще, именно статуса в представлениях нет :-(

Но в хелпе опубликован такой код (устыдились, и предложили костыль):
SELECT sj.Name, 
    CASE
        WHEN sja.start_execution_date IS NULL THEN 'Not running'
        WHEN sja.start_execution_date IS NOT NULL AND sja.stop_execution_date IS NULL THEN 'Running'
        WHEN sja.start_execution_date IS NOT NULL AND sja.stop_execution_date IS NOT NULL THEN 'Not running'
    END AS 'RunStatus'
FROM msdb.dbo.sysjobs sj
JOIN msdb.dbo.sysjobactivity sja
ON sj.job_id = sja.job_id
WHERE session_id = (
    SELECT MAX(session_id) FROM msdb.dbo.sysjobactivity);


Или можно из xp_sqlagent_enum_jobs, типа:
  DECLARE @xp_results TABLE (job_id                UNIQUEIDENTIFIER NOT NULL,
                            last_run_date         INT              NOT NULL,
                            last_run_time         INT              NOT NULL,
                            next_run_date         INT              NOT NULL,
                            next_run_time         INT              NOT NULL,
                            next_run_schedule_id  INT              NOT NULL,
                            requested_to_run      INT              NOT NULL, -- BOOL
                            request_source        INT              NOT NULL,
                            request_source_id     sysname          COLLATE database_default NULL,
                            running               INT              NOT NULL, -- BOOL
                            current_step          INT              NOT NULL,
                            current_retry_attempt INT              NOT NULL,
                            job_state             INT              NOT NULL)
INSERT INTO @xp_results
EXECUTE master.dbo.xp_sqlagent_enum_jobs @can_see_all_running_jobs, @job_owner, @job_id
11 дек 19, 22:12    [22038172]     Ответить | Цитировать Сообщить модератору
 Re: Проблема выполнения джоба  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
Максим Александровитч
Хотя найду..спс за идею,но пробелму-то мою не решит это..
А какая ещё осталась проблема?
11 дек 19, 22:13    [22038173]     Ответить | Цитировать Сообщить модератору
 Re: Проблема выполнения джоба  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 506
alexeyvg
Максим Александровитч
Хотя найду..спс за идею,но пробелму-то мою не решит это..
А какая ещё осталась проблема?


Штука в том,чтобы выцепить эти цифры о статусе,мне нужно переписать много строк кода. Реально,то есть на Openrowset очень много завязано на всем сервере...
И вот менять технологию определения запущенного джоба не хотелось..
А проблема в том,что

SELECT execution_status = a.current_execution_status
FROM OPENROWSET('SQLNCLI', 'Server=localhost;Trusted_Connection=yes;', 'exec msdb.dbo.sp_help_job @job_name = 'JOB'' ') a

не выполняется...выдает ошибку

сообщение: 11520, уровень: 16, состояние: 1, процедура: sp_describe_first_result_set, строка: 1 [строка начала пакета: 65]
Не удалось определить метаданные, поскольку инструкция "EXECUTE master.dbo.xp_sqlagent_is_starting @retval OUTPUT" в процедуре "sp_is_sqlagent_starting" вызывает расширенную хранимую процедуру.


Собственно это и есть проблема
11 дек 19, 22:22    [22038180]     Ответить | Цитировать Сообщить модератору
 Re: Проблема выполнения джоба  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 506
alexeyvg
Максим Александровитч
А из каких представлений можно получить?
current_execution_status
Вообще, именно статуса в представлениях нет :-(

Но в хелпе опубликован такой код (устыдились, и предложили костыль):
SELECT sj.Name, 
    CASE
        WHEN sja.start_execution_date IS NULL THEN 'Not running'
        WHEN sja.start_execution_date IS NOT NULL AND sja.stop_execution_date IS NULL THEN 'Running'
        WHEN sja.start_execution_date IS NOT NULL AND sja.stop_execution_date IS NOT NULL THEN 'Not running'
    END AS 'RunStatus'
FROM msdb.dbo.sysjobs sj
JOIN msdb.dbo.sysjobactivity sja
ON sj.job_id = sja.job_id
WHERE session_id = (
    SELECT MAX(session_id) FROM msdb.dbo.sysjobactivity);


Или можно из xp_sqlagent_enum_jobs, типа:
  DECLARE @xp_results TABLE (job_id                UNIQUEIDENTIFIER NOT NULL,
                            last_run_date         INT              NOT NULL,
                            last_run_time         INT              NOT NULL,
                            next_run_date         INT              NOT NULL,
                            next_run_time         INT              NOT NULL,
                            next_run_schedule_id  INT              NOT NULL,
                            requested_to_run      INT              NOT NULL, -- BOOL
                            request_source        INT              NOT NULL,
                            request_source_id     sysname          COLLATE database_default NULL,
                            running               INT              NOT NULL, -- BOOL
                            current_step          INT              NOT NULL,
                            current_retry_attempt INT              NOT NULL,
                            job_state             INT              NOT NULL)
INSERT INTO @xp_results
EXECUTE master.dbo.xp_sqlagent_enum_jobs @can_see_all_running_jobs, @job_owner, @job_id


За это спс..по сути я нашел State джоба уже другим методом,но для опыта пригодится конечно
11 дек 19, 22:23    [22038181]     Ответить | Цитировать Сообщить модератору
 Re: Проблема выполнения джоба  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 506
Максим Александровитч
alexeyvg
пропущено...
А какая ещё осталась проблема?


Штука в том,чтобы выцепить эти цифры о статусе,мне нужно переписать много строк кода. Реально,то есть на Openrowset очень много завязано на всем сервере...
И вот менять технологию определения запущенного джоба не хотелось..
А проблема в том,что

SELECT execution_status = a.current_execution_status
FROM OPENROWSET('SQLNCLI', 'Server=localhost;Trusted_Connection=yes;', 'exec msdb.dbo.sp_help_job @job_name = 'JOB'' ') a

не выполняется...выдает ошибку

сообщение: 11520, уровень: 16, состояние: 1, процедура: sp_describe_first_result_set, строка: 1 [строка начала пакета: 65]
Не удалось определить метаданные, поскольку инструкция "EXECUTE master.dbo.xp_sqlagent_is_starting @retval OUTPUT" в процедуре "sp_is_sqlagent_starting" вызывает расширенную хранимую процедуру.


Собственно это и есть проблема


Если поможете решить,буду крайне признателен
11 дек 19, 22:31    [22038183]     Ответить | Цитировать Сообщить модератору
 Re: Проблема выполнения джоба  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
Максим Александровитч
Собственно это и есть проблема
А, просто вы написали, что "решили проблему получения статуса, но осталась ещё одна проблема".
Максим Александровитч
Если поможете решить,буду крайне признателен
И зачем её решать, если статус можно получить по-другому, 2 способа я вам написал???

А решить именно ту задачу, которую вы изложили, то есть всё таки вызвать sp_help_job через OPENROWSET, невозможно, из за подхода сиквела к получению метаданных.

Проблема тут в неправильной постановке задачи.
Нужно ставить бизнес-задачу, и её решать, а вы ставите заведомо невыполнимую техническую задачу.
Например, 2 задачи: "осветить путь ночью", и "передвинуть луну повыше, что бы светила".
Первую решить можно, а вторую нельзя.
11 дек 19, 22:46    [22038194]     Ответить | Цитировать Сообщить модератору
 Re: Проблема выполнения джоба  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 506
alexeyvg
Максим Александровитч
Собственно это и есть проблема
А, просто вы написали, что "решили проблему получения статуса, но осталась ещё одна проблема".
Максим Александровитч
Если поможете решить,буду крайне признателен
И зачем её решать, если статус можно получить по-другому, 2 способа я вам написал???

А решить именно ту задачу, которую вы изложили, то есть всё таки вызвать sp_help_job через OPENROWSET, невозможно, из за подхода сиквела к получению метаданных.

Проблема тут в неправильной постановке задачи.
Нужно ставить бизнес-задачу, и её решать, а вы ставите заведомо невыполнимую техническую задачу.
Например, 2 задачи: "осветить путь ночью", и "передвинуть луну повыше, что бы светила".
Первую решить можно, а вторую нельзя.


Я прекрасно понимаю о чем вы,но в менторстве нет необходимости.
Спустя 10 минут после поста я решил задачу,используя with result sets

А решить именно ту задачу, которую вы изложили, то есть всё таки вызвать sp_help_job через OPENROWSET, невозможно, из за подхода сиквела к получению метаданных.

Эту задачу можно решить.
Спс,в любом случае
12 дек 19, 09:59    [22038380]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить