Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.011 c
8-45998
BOA_KAA
2002-07-25 16:26
2002.11.14
Выделение части рисунка в TImage


4-46185
Th
2002-10-02 20:20
2002.11.14
Как Bitmap поместить на DC?


7-46154
moor38
2002-09-12 12:04
2002.11.14
Автозагрузка


14-46079
Дмитрий К.К.
2002-10-23 23:40
2002.11.14
Вопрос к тем, кто знает WinXP


1-45930
DenK_vrtz
2002-11-01 15:43
2002.11.14
Как определить класс?




   Наверх