| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Базы данных и репортинг > Блокировка выполнения запросов |
| Автор: Lunatikus 6.6.2008, 14:24 |
| Здравствуйте.Нужна Ваша помощь. Есть некая процедура proc,которая берет данные из одной таблицы и переносит их в другую по расписанию в job'e,т.е. производит обновление каждые 15 минут. Данные берутся с одного сервера и передаются в таблицу на другом сервере.Сама процедура на сервере-посреднике. Т.е. принимающий сервер не имеет доступа к другим серверам. Однако в момент такого импорта данных принимающая таблица может участвовать в сложном запросе(процедура proc_2),где из нее выбираются данные. Если ничего не блокировать,то процедура proc_2 возвращает "время ожидания истекло" в периоды обновления данных. Как правильнее поступить в таком случае?В приоритете стоит обновление.Но проблема в том,что я не могу(не умею) прерывать выполнение proc_2,если ее выполнение попадает на выполнение proc. прошу прощения,что ошибся разделом.Если не сложно,перенесите.Или,может,тут она тоже сможет жить. |
| Автор: Frees 6.6.2008, 14:35 |
| мне кажется данную проблему можно решить управляя Уровнем изоляций транзакций и режимоми блоировки, попробуй в этом направлений посмотреть, кстати не плохобы знать что за СУБД и метод доступа |
| Автор: Lunatikus 6.6.2008, 14:50 |
| дада,забыл совсем.Думал,что в соответствующем разделе пишу. MS SQL 2005.ADO. Сами процедуры на сервере, в АДО прописываю просто exec с параметрами. пойду посмотрю,что за уровни изоляций такие. |
| Автор: Lunatikus 6.6.2008, 15:23 |
| поставил процедуре импорта set deadlock_priority high а процедуре,которая работает с этой же таблицей low. Тестирую... |
| Автор: Lunatikus 6.6.2008, 16:52 |
| не работает =( даже если у proc_2 стоит приоритет блокировки high,ее все равно прерывает процедура,импортирующая данные(proc) и вылетает ошибка "время ожидания истекло". может,я неправильно понимаю,как пользоваться set deadlock_priority? Что я делаю: в процедуре proc перед селектом я пишу set deadlock_priority low, а в процедуре импорта данных proc_2 перед импортом пишу set deadlock_priority high. Т.е. при конфликте доступа к данным proc станет "жертвой" и proc_2 не прервется. В чем я не прав? Добавлено через 12 минут и 31 секунду и подскажите,пожалуйста,в каком контексте используется параметр rowlock? |