|
|
|
Как узнать, что запись, которую собираешься редактировать, заблокирована
|
|||
|---|---|---|---|
|
#18+
Сразу оговорюсь, специальную таблицу содержащую информацию о блокированных записях держать не хочется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2002, 12:03:31 |
|
||
|
Как узнать, что запись, которую собираешься редактировать, заблокирована
|
|||
|---|---|---|---|
|
#18+
Здесь посмотри\r \r ЗЫ Этот топик находится на 18-20 строк ниже твоего. Может, ПОИСК бы тебе помог? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2002, 12:07:46 |
|
||
|
Как узнать, что запись, которую собираешься редактировать, заблокирована
|
|||
|---|---|---|---|
|
#18+
Мы используем пару процедур: sp_getapplock sp_releaseapplock Смысл сейчас не вспомню... по моему устанавливается поименованная блокировка при редактировании, соответственно если редактирование не завершено, установка новой поименованной блокировки не возможна... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2002, 12:24:46 |
|
||
|
Как узнать, что запись, которую собираешься редактировать, заблокирована
|
|||
|---|---|---|---|
|
#18+
Я блокирую записи для совместого использования, чтобы другие пользователи могли читать, но не редактировать Код: plaintext 1. Другой пользователь должен получить сообщение, что запись заблокирована Метод, предложенный Dankov ************ В принципе можно получить набор данных, содержажий первичные ключи (или записи целиком), залоченных записей в таблице: 1) отбираем все записи с хинтом NOLOCK 2) отбираем незалоченные записи хинтом READPAST 3) разница между ними и есть залоченные записи. Есно, это все пишется в один запрос. ************ в моем случае не работает - оба запроса дают один и тот же результат А прежде чем задать вопрос, конечно же посмотрел все близкие темы ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2002, 12:43:14 |
|
||
|
Как узнать, что запись, которую собираешься редактировать, заблокирована
|
|||
|---|---|---|---|
|
#18+
Почесавшись, родил ХП, определяющую, заблокирована ли запись (@RowId) в таблице (@TableName) для совместного использования процессом, отличным от заданного (@SPId) . Предполагается, что таблицы имеют поле Id с кластерным индексом Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. Процедура создана на основе sp_lock Блокировка записей для совместного использования осуществляется командами типа Код: plaintext 1. 2. И стало мне счастье ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2002, 18:28:52 |
|
||
|
Как узнать, что запись, которую собираешься редактировать, заблокирована
|
|||
|---|---|---|---|
|
#18+
А можно глупый вопрос ? А что такое "запись заблокирована " ? Что это для Вас значит ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2002, 19:24:59 |
|
||
|
Как узнать, что запись, которую собираешься редактировать, заблокирована
|
|||
|---|---|---|---|
|
#18+
2 Серг70 А Вы то сами такое использовали? Круто конечно, но... Человек идёт по тупиковому пути, а Вы ему помогаете идти еще дальше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2002, 10:19:33 |
|
||
|
Как узнать, что запись, которую собираешься редактировать, заблокирована
|
|||
|---|---|---|---|
|
#18+
блин.... как... как... наткунтся на ошибку.... и обработать ее... вопрос за последнию неделю обсуждается каждый день.... ну объясните мне ,- ЗАЧЕМ Вам это нужно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2002, 10:36:15 |
|
||
|
Как узнать, что запись, которую собираешься редактировать, заблокирована
|
|||
|---|---|---|---|
|
#18+
Постараюсь ответить всем Исходная задача : Пользователь решил модифицировать ряд данных, связанных (может через несколько таблиц) с конкретной записью заданной таблицы. Информация о допустимости модификации считывается из БД (из заданной таблицы) многими пользователями, как правило с утра. У всех данные одни и те же. Процесс модификации может длится от нескольких минут до часов. При этом последовательно пересчитанные данные из одних таблиц добавляются в другие. В этом случае пользователь, начавший процесс, должен заблокировать возможность запустить тот же процес модификации для других ползователей, при этом давая работать с данными в режиме чтения, включая и исходную таблицу. Конечно, можно создать справочную таблицу и туда при начале процесса выкладывать а по окончании удалять имя таблицы и номер заблокированной записи. Но рухнувшие до окончания процесса соединения оставят заблокированными записи. Но и здесь можно победить, вставляя запись в справочную таблицу под транзакцией, а всем давая читать эту таблицу при незавершенной транзакции. Но в результате имеем лишнюю активно ипользуемую (и увеличивающую лог) таблицу. Вот для чего я и затеял всю эту байду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2002, 12:19:46 |
|
||
|
Как узнать, что запись, которую собираешься редактировать, заблокирована
|
|||
|---|---|---|---|
|
#18+
Про sp_getapplock, sp_releaseapplock читали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2002, 12:27:20 |
|
||
|
Как узнать, что запись, которую собираешься редактировать, заблокирована
|
|||
|---|---|---|---|
|
#18+
2 snake Предлагаемые Вами процедуры для блокирования ресурса могут обрабатываться только из приложений, так как фактически запрашиваемый ресурс не блокируется, а информация о нем заносится в системную таблицу master.dbo.syslockinfo . Да, в приложении можно соответствующим образом псевдоблокировку этого ресурса обработать. Но в случае использования ресурсов напрямую (вне приложения) нужно проверить визуально информацию о заблокированном ресурсе процедурой sp_lock , и если ресурс помечен как заблокированный, то с ним ничего не делать. Мой же метод физически блокирует ресурс и даже напрямую с ним ничего не сделаешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2002, 14:20:06 |
|
||
|
Как узнать, что запись, которую собираешься редактировать, заблокирована
|
|||
|---|---|---|---|
|
#18+
даже напрямую с ним ничего не сделаешь Боюсь даже предположить, что у меня такое возможно... Напрямую с таблицами не работает никто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2002, 14:29:45 |
|
||
|
Как узнать, что запись, которую собираешься редактировать, заблокирована
|
|||
|---|---|---|---|
|
#18+
А как же поддерка БД? Неужели ваши пользователи не совершают необратимых ошибок. Наши - только дай. Держим специальных программеров, вычищающих за ними плюхи. Есно, работают они с таблицами напрямую (ну быть может с применением каких-либо скриптов) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2002, 15:00:09 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32047631&tid=1820654]: |
0ms |
get settings: |
10ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
36ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 340ms |

| 0 / 0 |
