Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Sleeping / 20 сообщений из 20, страница 1 из 1
31.05.2001, 08:30
    #32006686
DmtP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sleeping
Запускаю из Query Analiser большой скрипт с несколькими курсорами.Через некоторое время все процессы засыпают (sleeping) и еще через некоторое время Query Analiser выдает: unknown token received from server. Выполнение прекращается.
Просветите если могете.
...
Рейтинг: 0 / 0
31.05.2001, 09:39
    #32006697
Garya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sleeping
А в Properties QA стоит галочка на Implicit transactions?
...
Рейтинг: 0 / 0
31.05.2001, 09:44
    #32006698
DmtP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sleeping
Не стоит
...
Рейтинг: 0 / 0
31.05.2001, 10:40
    #32006711
Garya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sleeping
И хорошо, что не стоит. Тогда осталось вылавливать взаимные блокировки и всякие прочие ошибки с помощью отладчика, Profiler и Current Activity EM.
...
Рейтинг: 0 / 0
31.05.2001, 11:15
    #32006715
DmtP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sleeping
Нет никаких ошибок,блокировок и пр, база в однопользовательском режиме. Процесс просто засыпает намертво, причем не каждый запуск-один запуск проходит, а следующий засыпает.
...
Рейтинг: 0 / 0
31.05.2001, 11:18
    #32006716
Genady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sleeping
Покажите код скрипта в том месте где засыпает.
...
Рейтинг: 0 / 0
31.05.2001, 12:18
    #32006723
DmtP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sleeping
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
31.05.2001, 12:51
    #32006725
Genady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sleeping
Я не до конца понимаю что нужно сделать. Перетащить данные из другой базы и переномеровать айдишки? Опишите словами, что делает эта часть скрипта. По моему это все как минимум можно сделать через временные таблицы, база то наверное большая
...
Рейтинг: 0 / 0
31.05.2001, 12:57
    #32006726
DmtP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sleeping
Все именно так.
...
Рейтинг: 0 / 0
31.05.2001, 13:15
    #32006729
Genady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sleeping
Попробуйте вот так:

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
31.05.2001, 13:26
    #32006730
Genady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sleeping
Перед
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
31.05.2001, 13:44
    #32006734
DmtP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sleeping
2 Gennady
Все совсем не так.IDENTITY_INSERT не нужен.Я заливаю данные в рабочую таблицу с уже имеющимися данными по одной записи, а потом апдейчу айдишники в дочерних таблицах новым айдишником (@@identity).
...
Рейтинг: 0 / 0
31.05.2001, 13:46
    #32006736
Genady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sleeping
2 DmtP

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

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


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

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

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

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

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


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