Главная страница
    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.009 c
3-45736
Alex1980
2002-10-15 08:41
2002.11.14
Переиндексация таблиц Paradox


14-46109
Anatoly Podgoretsky
2002-10-26 09:57
2002.11.14
Именинники 26 октября


8-46015
ctapik-net
2002-07-23 06:36
2002.11.14
Как на загруженной картинке в TImage написать прозрачной надписью


1-45949
prorok2
2002-11-04 12:34
2002.11.14
Вызов внешней программы и работа с ней


3-45757
Andy Eremin
2002-10-25 07:39
2002.11.14
Свойство Expression компонента QRExpr





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский