Главная страница
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.47 MB
Время: 0.013 c
3-45670
Desdechado
2002-10-27 17:52
2002.11.14
Украинская кодировка для IB/FB


3-45661
Dusimov
2002-10-23 11:40
2002.11.14
соединить несколько таблиц


1-45912
_prizrak_
2002-11-03 20:50
2002.11.14
Вопрос по Kylix...


3-45691
alexts
2002-10-25 14:21
2002.11.14
Проблема MS SQL 2000 и OLE


1-45985
Бегинер
2002-11-04 17:32
2002.11.14
Помогите.....