Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.14;
Скачать: CL | DM;

Вниз

TADOStoredProc + deadlock   Найти похожие ветки 

 
Дуся ©   (2002-10-24 16:26) [0]

Хочу поделиться открытием! Вдруг кто не знает?..
Прямо таки недокументированная возможность ...

Имею на MSSQL 2000 процедуру, которая вызывает внутри еще одну, которая что-то там себе делает:
CREATE PROCEDURE dbo.sp_call_error
AS
begin transaction
exec sp_test_error
commit
GO


При работе sp_test_error возникает deadlock. Но перед этим успешно проходит какая-то ее часть, возвращая некий рекордсет, после чего вываливает deadlock, что очень хорошо видно из консоли:


(0 row(s) affected)

Server: Msg 1205, Level 13, State 54, Procedure sp_test_error, Line 12
Transaction (Process ID 56) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.

Так вот, в коде делаю вызов этой процедуры:
ADOStoredProc1.ProcedureName := "sp_call_error";
ADOStoredProc1.ExecProc;

В результате чего Exception не случается!!!!
А чтобы он все же случился, придется делать ADOStoredProc1.ExecuteOptions:=[eoExecuteNoRecords]
Тогда и только тогда все рекордсеты игнорируются и мы получаем долгожданный EOleException!..

Простите, если кому-то вопрос показался очевидным. Я билась три дня.


 
Johnmen ©   (2002-10-24 17:29) [1]

Поаккуратнее с транзакциями !
Убери ненужную в sp_call_error.


 
Дуся ©   (2002-10-24 17:47) [2]

Ну это в тестовом примере так. на самом деле там вроде как содержательно она нужна....


 
Johnmen ©   (2002-10-24 17:57) [3]

Тогда поясню.
deadlock возникает, когда в рамках стартованной тр-ии предпринимается попытка изменить данные, уже измененные другой тр-ей, стартованной ранее и изменившей данные после старта второй...
Короче - аккуратнее ! :)))


 
Дуся ©   (2002-10-24 18:45) [4]

Да знаю я, и пример смоделировала специально.
Только там такой сложный процесс онлайн идет - без поллитры не разберешься!...
Изменения идут постоянно, несколько раз в секунуд, разными процедурами, плюс пользователи....

А можно как-то в этом примере внутри внешней процедуры понять, что во вложеной случилась беда?..



Страницы: 1 вся ветка

Текущий архив: 2002.11.14;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.017 c
3-45731
RVGroup
2002-10-24 14:49
2002.11.14
Впечатления от Cache 5


1-45931
kc-action
2002-11-03 20:33
2002.11.14
Компонент


1-45923
aglar
2002-11-02 10:16
2002.11.14
Изменение свойств стандартных компонент


1-45835
Delph
2002-11-05 11:49
2002.11.14
Как установить курсор на последнюю строку Memo?


14-46078
Beginner-Designer
2002-10-24 16:31
2002.11.14
FAQ по прошивкам телефонов Nokia