|
|
|
Помогите с блокировками разобраться
|
|||
|---|---|---|---|
|
#18+
Есть процедурка в которой несколько всяких инсёртов,апдейтов и селектов. Так вот ., во первых на каком-то этапе происходит затык и выяснить сложновато так как происходит полный откат всех операций,поэтому можно ли в MS Sql Server 7.0 по шагово отлаживать процедурку, во вторых, блокировки действуют до нового их объявления или же только на последующую вложенную транзакию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2002, 09:03:50 |
|
||
|
Помогите с блокировками разобраться
|
|||
|---|---|---|---|
|
#18+
Если можно, то переведите сказанное на русский :). Что такое "затык"? Надеюсь, это не то, что я подумал? Может быть это дедлок? Или неспособность разобраться в том, что написано ранее при необходимости дополнить текст процедуры некоторым количетсвом строк на TSQL? Или это просто ошибка времени выполнения? Если ошибка, то приведите пожалуйста ее текст. Пошагово отлаживать процедуру можно из QA при условии, что вы установите более новую версию SQL-сервера, а именно 2000. Можно отлаживать и в версии 7.0, но в комплекте поставки SQL7.0 подобной утилиты нет. Она поставляется, например, с Visual Studio 6.0. Блокировки действуют ВСЕГДА. Любое обращение к некоторым таблицы приводит к наложению блокировок (либо явно, либо неявно). Блокировки бывают разделяемые, монопольные, на чтение, на запись, намерения и т.д. (лучше об этом почитать в литературе, а то мой топик превратится в "Войну и Мир"). Внутри одной транзакции блокировки на один и тот же ресурс сохраняются до конца транзакции. Статус блокировки на один и тот же ресурс в рамках одной и той же транзакции может изменяться, то только в сторону захвата еще большей части ресурса, либо ужесточения этой блокировки. Подобный процесс называется "эскалацией блокировок" (например, блокировка на уровне строки может перейти к страничной, а страничная - к блокировке всей таблицы). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2002, 09:46:16 |
|
||
|
Помогите с блокировками разобраться
|
|||
|---|---|---|---|
|
#18+
затык - это я имелл в ивду,что на каком то этапе происходит проблема(ошибка - не суть важно) и в результате все транзакции откачиваюся. А убирать полный откат - опасно -потом там ногу сломаешь. Поэтому ошибки то собственно и нет.. Значит придётся в QA А скачать отдельно утилитку нельзя по отладке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2002, 10:09:15 |
|
||
|
Помогите с блокировками разобраться
|
|||
|---|---|---|---|
|
#18+
Ошибка ошибке рознь. Большинство ошибок проверяется с помощью @@Error. Откат транзакции факт возникновения ошибки автоматом не вызывает, правда это не во всех случаях корректно, для некоторых особых ситуаций требуются особые установки, например set arithabort. Ошибку можно проанализировать и принять ответные меры. Некоторые клиентские инструментарии выявляют ошибку и автоматом посылают rollback. Бороться тогда нужно с ними. Отдельный вопрос - вложенные транзакции. Суть сводится к тому, что про них можно забыть и рассматривать их как одну большую транзакцию. Внутренние Commit просто опускаешь - потому что в них нет никакого смысла. А вот ЛЮБОЙ rollback откатывает эту макротранзакцию целиком. Зачем так сделано? По одной версии для соблюдения требований атомарности транзакции, по другой версии - так было просто проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2002, 23:42:08 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32051201&tid=1820242]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
56ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 217ms |
| total: | 350ms |

| 0 / 0 |
