powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Sleeping
20 сообщений из 20, страница 1 из 1
Sleeping
    #32006686
DmtP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запускаю из Query Analiser большой скрипт с несколькими курсорами.Через некоторое время все процессы засыпают (sleeping) и еще через некоторое время Query Analiser выдает: unknown token received from server. Выполнение прекращается.
Просветите если могете.
...
Рейтинг: 0 / 0
Sleeping
    #32006697
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Garya Привилегированный пользователь
Участник
А в Properties QA стоит галочка на Implicit transactions?
...
Рейтинг: 0 / 0
Sleeping
    #32006698
DmtP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не стоит
...
Рейтинг: 0 / 0
Sleeping
    #32006711
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Garya Привилегированный пользователь
Участник
И хорошо, что не стоит. Тогда осталось вылавливать взаимные блокировки и всякие прочие ошибки с помощью отладчика, Profiler и Current Activity EM.
...
Рейтинг: 0 / 0
Sleeping
    #32006715
DmtP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет никаких ошибок,блокировок и пр, база в однопользовательском режиме. Процесс просто засыпает намертво, причем не каждый запуск-один запуск проходит, а следующий засыпает.
...
Рейтинг: 0 / 0
Sleeping
    #32006716
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Покажите код скрипта в том месте где засыпает.
...
Рейтинг: 0 / 0
Sleeping
    #32006723
DmtP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
declare curs cursor for select pWaybillID from TradeOpt.dbo.pWaybills
open curs
fetch curs into @pRet
while @@fetch_status=0
begin
insert pWaybills ()
select ... from TradeOpt.dbo.pWaybills where pWaybillID=@pRet
if @@error<>0
select 3 as Ex_er
select 3 as M
update pReturnDopt
set pWaybillID=@@identity where pWaybillID=@pRet
if @@error<>0
select 4 as Ex_er
select 4 as M
update pWaybillDopt
set pWaybillID=@@identity where pWaybillID=@pRet
if @@error<>0
select 5 as Ex_er
select 5 as M
fetch curs into @pRet
end
close curs
deallocate curs
...
Рейтинг: 0 / 0
Sleeping
    #32006725
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не до конца понимаю что нужно сделать. Перетащить данные из другой базы и переномеровать айдишки? Опишите словами, что делает эта часть скрипта. По моему это все как минимум можно сделать через временные таблицы, база то наверное большая
...
Рейтинг: 0 / 0
Sleeping
    #32006726
DmtP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все именно так.
...
Рейтинг: 0 / 0
Sleeping
    #32006729
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте вот так:

declare @Id int,
@String varchar(200)

select @Id = max(pWaybillID) from pWaybills

set @string = 'Create table #pWaybills(NewID identity(' + @Id + ', 1), OldId int)'
exec(@string)

insert into #pWaybills(OlId) select pWaybillID from TradeOpt.dbo.pWaybills

insert pWaybills ()
select tmp.NewID, ... from TradeOpt.dbo.pWaybills p inner join #pWaybills tmp on p pWaybillID = tmp.OldId

update p
set p.pWaybillID=temp.NewID from pReturnDopt p inner join #pWaybills tmp on p pWaybillID = tmp.OldId

update p
set p.pWaybillID=temp.NewID from pWaybillDopt p inner join #pWaybills tmp on p pWaybillID = tmp.OldId

drop table #pWaybills

Не понял правда ситуации с обработкой ошибок.
Курсор, ксати дофига памяти жрет, если данных очень много, а сервер не навороченный, запросто его забить может. Если где в синтаксисе ошибся, думаю разберетесь. Идея я полагаю понятна.
...
Рейтинг: 0 / 0
Sleeping
    #32006730
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Перед
insert pWaybills ()
select tmp.NewID, ... from TradeOpt.dbo.pWaybills p inner join #pWaybills tmp on p pWaybillID = tmp.OldId

SET IDENTITY_INSERT ON
...
Рейтинг: 0 / 0
Sleeping
    #32006734
DmtP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Gennady
Все совсем не так.IDENTITY_INSERT не нужен.Я заливаю данные в рабочую таблицу с уже имеющимися данными по одной записи, а потом апдейчу айдишники в дочерних таблицах новым айдишником (@@identity).
...
Рейтинг: 0 / 0
Sleeping
    #32006736
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 DmtP

Посмотрите внимательнее на код, новые айдишки вам выдаст временная таблица.
...
Рейтинг: 0 / 0
Sleeping
    #32006738
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Немаловажный вопрос, во время этой операции с таблицей работает кто-нибудь еще?
Если да, тогда прийдется извращаться со счетчиком, либо придумывать другой вариант, кстати проверьте сколько ресурсов забирает курсор. Ну и не плохо было бы сказать какой объем данных таким образом заливается
...
Рейтинг: 0 / 0
Sleeping
    #32006739
DmtP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я же уже писал, что база в однопользовательском режиме, объем:pWaybills - 7000,pWaybillDopt - 80000
...
Рейтинг: 0 / 0
Sleeping
    #32006741
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>объем:pWaybills - 7000,pWaybillDopt - 80000
Да? А где? Может мне пора к окулисту

Ну пропустил про однопользовательский режи, давайте меня теперь запинаем


А мой вариант советую попробовать, даже если причина засыпания не в курсоре, он все равно быстрее работать должен.
...
Рейтинг: 0 / 0
Sleeping
    #32006781
Насколько я понял, имеет место просто синтаксическая ошибка.

> set pWaybillID=@@identity where pWaybillID=@pRet

такой конструкции в MSSQL не предусмотрено. set можно делать только для переменных и уж конечно никаких where там быть не должно.
...
Рейтинг: 0 / 0
Sleeping
    #32006782
Сорри, update проглядел в спешке.
...
Рейтинг: 0 / 0
Sleeping
    #32006783
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Глеб Уфимцев

Нет, Вы неправильно поняли , потому что это не все выражение, вот все выражение:
update pWaybillDopt
set pWaybillID=@@identity where pWaybillID=@pRet

Я тоже поначалу купился , а если бы была синтаксическая ошибка, то QA тут же сообщил бы.
...
Рейтинг: 0 / 0
Sleeping
    #32006809
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Garya Привилегированный пользователь
Участник
А почему бы не запустить профайлер или эту самую процедуру в отладчике и посмотреть, чем она там занимается и в каком месте начинает клевать носом.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Sleeping
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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