Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.11.14;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.008 c
1-45904
RDA
2002-11-05 18:48
2002.11.14
Internet Explorer


1-45905
stone
2002-11-05 15:18
2002.11.14
Ошибка при вызове DLL


1-45981
Serge Pik
2002-11-04 16:04
2002.11.14
Редактирование TChart перетаскиванием точек мишью.


3-45676
Serginio
2002-10-27 14:08
2002.11.14
Ктонибудь сравнивал ado и dbexpress при работе с MS SQL


1-45906
fellis
2002-11-03 09:56
2002.11.14
Есть ли процедура добавления файла на рабочий стол?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский