Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Выход из курсора без ошибки  [new]
Кхе
Guest
Подскажите есть курсор, на 2000 сервере
declare c cursor local static for
select i
from @t

open c
fetch next from c into @i
while @@fetch_status=0 begin
	exec dbo.usp_test @i
	
	fetch next from c into @i
end
print 'END CURSOR'

close c
deallocate c

Внутри которого выполняется ХП, почему то в какие то моменты курсор завершается и не доходит до print 'END CURSOR', никакой ошибки я не получаю.
Выполняю в SSMS. По каким причинам так может происходить и как это отладить?
18 июн 14, 13:07    [16181697]     Ответить | Цитировать Сообщить модератору
 Re: Выход из курсора без ошибки  [new]
Glory
Member

Откуда:
Сообщений: 104760
Кхе
Внутри которого выполняется ХП, почему то в какие то моменты курсор завершается и не доходит до print 'END CURSOR',

И без вызова процедуры тоже не доходит ?

Кхе
никакой ошибки я не получаю.

А вы где пытаетесь ее наблюдать ? В Профайлере ?
18 июн 14, 13:14    [16181752]     Ответить | Цитировать Сообщить модератору
 Re: Выход из курсора без ошибки  [new]
Кхе
Guest
Без вызова доходит. Но проблема в том что без вызова ХП, курсор отработает за 1 сек., а с вызовом ХП это несколько часов, причем курсор завершается на разных @i .

Наблюдать я ее пытаюсь в SSMS как и в случае всех остальных ошибок. Профайлер на рабочей БД я не могу запустить, т.к. они прилично замедляет работу сервера, а в тестовом не получаю такого же завершения курсора.

Я просто не совсем понимаю как выловить ошибку эту. Могут ли курсоры в dbo.usp_test влиять на мой внешний курсор.
Ну вообще я не совсем понимаю как может курсор завершиться судя по всему аварийно т.к. до print не доходим, но в тоже время в SSMS не быть сообщения об ошибке? У вас было что то подобное?
18 июн 14, 13:28    [16181900]     Ответить | Цитировать Сообщить модератору
 Re: Выход из курсора без ошибки  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Кхе
Без вызова доходит. Но проблема в том что без вызова ХП, курсор отработает за 1 сек., а с вызовом ХП это несколько часов, причем курсор завершается на разных @i .

Наблюдать я ее пытаюсь в SSMS как и в случае всех остальных ошибок. Профайлер на рабочей БД я не могу запустить, т.к. они прилично замедляет работу сервера, а в тестовом не получаю такого же завершения курсора.

Я просто не совсем понимаю как выловить ошибку эту. Могут ли курсоры в dbo.usp_test влиять на мой внешний курсор.
Ну вообще я не совсем понимаю как может курсор завершиться судя по всему аварийно т.к. до print не доходим, но в тоже время в SSMS не быть сообщения об ошибке? У вас было что то подобное?


Может у вас элементарно случается таймаут и сессия прекращается.
18 июн 14, 13:31    [16181917]     Ответить | Цитировать Сообщить модератору
 Re: Выход из курсора без ошибки  [new]
Glory
Member

Откуда:
Сообщений: 104760
Кхе
Но проблема в том что без вызова ХП, курсор отработает за 1 сек., а с вызовом ХП это несколько часов, причем курсор завершается на разных @i

Значит проблема в вашей процедуре

Кхе
Я просто не совсем понимаю как выловить ошибку эту.Могут ли курсоры в dbo.usp_test влиять на мой внешний курсор.

Ну вы же сами сказали, что "без вызова ХП, курсор отработает"

Кхе
Профайлер на рабочей БД я не могу запустить, т.к. они прилично замедляет работу сервера,

Потому что не надо трассировать все события во всех соединениях
18 июн 14, 13:31    [16181919]     Ответить | Цитировать Сообщить модератору
 Re: Выход из курсора без ошибки  [new]
Кхе
Guest
a_voronin,

Не думаю, завершение бывает как через минуту так и через 3 часа
18 июн 14, 13:36    [16181970]     Ответить | Цитировать Сообщить модератору
 Re: Выход из курсора без ошибки  [new]
Кхе
Guest
Glory
Значит проблема в вашей процедуре

Я понимаю что проблема в моей процедура, но сама по себе она выполняется без ошибок и выполняя ее с параметром @i на котором было завершение вне курсора все выполняется как должно.
Glory
Ну вы же сами сказали, что "без вызова ХП, курсор отработает"

Да но и ХП которая в курсе вне курсора выполняется, без ошибок, хотя я уже не уверен, вы считаете нельзя доверять SSMS который сообщает об успешно выполнении ХП?
Glory
Потому что не надо трассировать все события во всех соединениях

Да я в курсе про фильтры, но все равно судя по всему замедляется работа сервера. Подскажите при трассе какой фильтр задать чтобы выловить именно завершение моего курсора, и что я там вообще ожидаю увидеть? ошибку или какое то другое событие?
18 июн 14, 13:41    [16182016]     Ответить | Цитировать Сообщить модератору
 Re: Выход из курсора без ошибки  [new]
Glory
Member

Откуда:
Сообщений: 104760
Кхе
Да но и ХП которая в курсе вне курсора выполняется, без ошибок, хотя я уже не уверен, вы считаете нельзя доверять SSMS который сообщает об успешно выполнении ХП?

Если две вещи по отдельности выполняются корректно, то это не гарантируют их соместную корректную работу

Кхе
Я понимаю что проблема в моей процедура, но сама по себе она выполняется без ошибок и выполняя ее с параметром @i на котором было завершение вне курсора все выполняется как должно.

Вы хотя бы узнали до какого @i доходит цикл ?
Вы добавляли в процедуру отладочные выводы, чтобы узнать, где происходит "останов" ?

Кхе
ошибку или какое то другое событие?

Разумеется серверную ошибку. Ошибку в логике профайлер ведь не сможет отловить
18 июн 14, 13:48    [16182074]     Ответить | Цитировать Сообщить модератору
 Re: Выход из курсора без ошибки  [new]
Crimean
Member

Откуда:
Сообщений: 13148
тряпками в меня кинут, конечно, но кто / что мешает обернуть вызов в TRY блок?
как минимум после этого вы уже почти-почти всегда дойдете до конца курсора
18 июн 14, 13:49    [16182093]     Ответить | Цитировать Сообщить модератору
 Re: Выход из курсора без ошибки  [new]
Glory
Member

Откуда:
Сообщений: 104760
Crimean
тряпками в меня кинут, конечно, но кто / что мешает обернуть вызов в TRY блок?

ТС уверяет, что в студии не видит сообщений об ошибке
18 июн 14, 13:51    [16182103]     Ответить | Цитировать Сообщить модератору
 Re: Выход из курсора без ошибки  [new]
Crimean
Member

Откуда:
Сообщений: 13148
Glory,



ну мы-то знаем (ц), что:
- какие ИД попадают в @t и воспроизводимо ли это - хз
- порядок выборки id из @t - не определен, нет order by
- как ТС определяет на какой ИД оборвалось выполнение, раз нет логирования обрабатываемой ИД перед обработкой - хз
ну и т.д.

как-то так, что ли, в очень первом приближении, попробовать бы:

set nocount on

declare c cursor local static for
select i
from @t
order by i

open c

raiserror( 'BEGIN CURSOR', 0, 1 ) with nowait

while 1=1 begin

	fetch next from c into @i
	if @@fetch_status != 0 break

	raiserror( 'row I #%d', 0, 1, @i ) with nowait

	begin try
		exec dbo.usp_test @i
	end try
	begin catch
		if @@trancount <> 0 rollback

		declare @e nvarchar(2048) 
		set @e = error_message()

		raiserror( 'Error (%s)' at row #%d, 1, 1, @e, @i ) with nowait
	end catch
end
	
raiserror( 'END CURSOR', 0, 1 ) with nowait
18 июн 14, 14:09    [16182284]     Ответить | Цитировать Сообщить модератору
 Re: Выход из курсора без ошибки  [new]
Кхе
Guest
Glory
Вы хотя бы узнали до какого @i доходит цикл ?
Вы добавляли в процедуру отладочные выводы, чтобы узнать, где происходит "останов" ?

Это всегда разные @i, я добавлял принты до вызова ХП, но т.к. @i всегда разные. и если вызвать отдельно ХП с параметром @i, на котором завершился курсор, то мне ничего это не дало
Glory
Разумеется серверную ошибку. Ошибку в логике профайлер ведь не сможет отловить

Скажите если я не вижу серверную ошибку в SSMS почему бы я ее увижу в профайлере?
18 июн 14, 14:19    [16182365]     Ответить | Цитировать Сообщить модератору
 Re: Выход из курсора без ошибки  [new]
Кхе
Guest
Crimean
тряпками в меня кинут, конечно, но кто / что мешает обернуть вызов в TRY блок?
как минимум после этого вы уже почти-почти всегда дойдете до конца курсора

Потому что в 1 сообщении указана версия сервера) и это 2000 в котором нет try
18 июн 14, 14:20    [16182372]     Ответить | Цитировать Сообщить модератору
 Re: Выход из курсора без ошибки  [new]
Glory
Member

Откуда:
Сообщений: 104760
Кхе
Скажите если я не вижу серверную ошибку в SSMS почему бы я ее увижу в профайлере?

Потому что Профайлер - это программа. Ей не свойственны человеческие недостатки и слабости, которые могут повлиять на качество мониторинга

Кхе
Это всегда разные @i, я добавлял принты до вызова ХП, но т.к. @i всегда разные. и если вызвать отдельно ХП с параметром @i, на котором завершился курсор, то мне ничего это не дало

Количество шагов цикла одинаковое ?
И @i разные для одних и тех же условий запуска ?
18 июн 14, 14:23    [16182394]     Ответить | Цитировать Сообщить модератору
 Re: Выход из курсора без ошибки  [new]
Кхе
Guest
Crimean
ну мы-то знаем (ц), что:
- какие ИД попадают в @t и воспроизводимо ли это - хз
- порядок выборки id из @t - не определен, нет order by
- как ТС определяет на какой ИД оборвалось выполнение, раз нет логирования обрабатываемой ИД перед обработкой - хз
ну и т.д.

как-то так, что ли, в очень первом приближении, попробовать бы:

Да воспроизводимо @i список один и тотже
Порядок действительно не определен, но завершение проходит в разных очередностях и времени выполнения и разных @i, у меня стойкое ощущение какие то внешних вызовов или какие то внешних факторов которые как то завершают курсор.
@i определялось - print @i до вызова ХП
18 июн 14, 14:23    [16182399]     Ответить | Цитировать Сообщить модератору
 Re: Выход из курсора без ошибки  [new]
Glory
Member

Откуда:
Сообщений: 104760
Кхе
у меня стойкое ощущение какие то внешних вызовов или какие то внешних факторов которые как то завершают курсор.

В смысле "внешние" ? Рука Бога прерывает выполнение ?

Ваш сервер хоть патченный ?
18 июн 14, 14:25    [16182417]     Ответить | Цитировать Сообщить модератору
 Re: Выход из курсора без ошибки  [new]
Кхе
Guest
Glory
Потому что Профайлер - это программа. Ей не свойственны человеческие недостатки и слабости, которые могут повлиять на качество мониторинга

Не хочу показаться занудой, знаю что вам на этом форуме не однократно приходилось сталкиваться с глупостью вопрошающего) Но SSMS тоже программа и я уже не однократно получил от нее сообщение об успешном выполнении ХП. когда print показывал обратное.

Glory
Количество шагов цикла одинаковое ?
И @i разные для одних и тех же условий запуска ?

Шагов одинаково
@I одни и теже
18 июн 14, 14:26    [16182420]     Ответить | Цитировать Сообщить модератору
 Re: Выход из курсора без ошибки  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8933
Можно попробовать убрать из цикла условие Fetch_status = 0 и сохранять fetch_status в какой-нибудь лог - Вы определите, проблема действительно с чтением из курсора или с чем-то другим.
18 июн 14, 14:27    [16182429]     Ответить | Цитировать Сообщить модератору
 Re: Выход из курсора без ошибки  [new]
Glory
Member

Откуда:
Сообщений: 104760
Кхе
Но SSMS тоже программа и я уже не однократно получил от нее сообщение об успешном выполнении ХП. когда print показывал обратное.

Дело еще в том, что за SMS сидите вы. А профайлер ловит события без вашего участия.

Кхе
Шагов одинаково
@I одни и теже

@I уже одинаковые ?
18 июн 14, 14:28    [16182440]     Ответить | Цитировать Сообщить модератору
 Re: Выход из курсора без ошибки  [new]
случайно заглянул
Guest
Кхе
@I одни и теже

Так разные или одни и те же? Определитесь.
18 июн 14, 14:30    [16182458]     Ответить | Цитировать Сообщить модератору
 Re: Выход из курсора без ошибки  [new]
Кхе
Guest
Кот Матроскин
Можно попробовать убрать из цикла условие Fetch_status = 0 и сохранять fetch_status в какой-нибудь лог - Вы определите, проблема действительно с чтением из курсора или с чем-то другим.

Статус я тоже выводил, но даже если бы что то было бы со статусом, print 'END' всеравно бы отрабатывал, а он не отрабатыает
18 июн 14, 14:45    [16182608]     Ответить | Цитировать Сообщить модератору
 Re: Выход из курсора без ошибки  [new]
Кхе
Guest
Glory
Кхе
Но SSMS тоже программа и я уже не однократно получил от нее сообщение об успешном выполнении ХП. когда print показывал обратное.

Дело еще в том, что за SMS сидите вы. А профайлер ловит события без вашего участия.

Кхе
Шагов одинаково
@I одни и теже

@I уже одинаковые ?

Имеется ввиду что набор уникальных @i, который обрабатывается в курсоре, один и тот же
18 июн 14, 14:46    [16182620]     Ответить | Цитировать Сообщить модератору
 Re: Выход из курсора без ошибки  [new]
Glory
Member

Откуда:
Сообщений: 104760
Кхе
Имеется ввиду что набор уникальных @i, который обрабатывается в курсоре, один и тот же

И порядок их прохождения циклом один и тот же ?
И проблемный шаг цикла тоже один и тот же ?
18 июн 14, 14:47    [16182642]     Ответить | Цитировать Сообщить модератору
 Re: Выход из курсора без ошибки  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8933
Кхе,

Что значит "выводил"? Что "вывелось"? Последний @@fetch_status получался ненулевой, но при этом в @t есть необработанные строки?
18 июн 14, 14:50    [16182671]     Ответить | Цитировать Сообщить модератору
 Re: Выход из курсора без ошибки  [new]
Кхе
Guest
Glory
Кхе
Имеется ввиду что набор уникальных @i, который обрабатывается в курсоре, один и тот же

И порядок их прохождения циклом один и тот же ?
И проблемный шаг цикла тоже один и тот же ?

Порядок одинаковый
Проблемный @i всегда разный
Проблемный шаг разный
18 июн 14, 14:55    [16182722]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить