Эквивалент DB2 "WITH (HOLDLOCK)" - PullRequest
       0

Эквивалент DB2 "WITH (HOLDLOCK)"

0 голосов
/ 21 января 2011

В SQL Server вы можете написать следующее:

UPDATE myTable WITH (HOLDLOCK) SET myIntColumn = 123

Мне нужно перенести этот оператор в DB2. Что будет эквивалентно «WITH (HOLDLOCK)»?

1 Ответ

3 голосов
/ 21 января 2011

Эквивалентный оператор в DB2 прост:

UPDATE myTable SET myIntColumn = 123

DB2 будет удерживать блокировки строк, затронутых оператором UPDATE, до фиксации транзакции.

Несколько замечаний:

1) Если вы не отключили autoCommit в своем приложении, транзакция будет неявно зафиксирована, как только этот оператор завершит выполнение.Обычно autoCommit включен по умолчанию.

2) DB2 9.7 добавлена ​​семантика блокировки в настоящее время зафиксировано, что позволяет другим приложениям читать зафиксированные данные, даже когда строки заблокированы, но еще не зафиксированы (это похоже на то, как Oracle использует сегменты отката).Если вы работаете в DB2 9.7 и беспокоитесь о том, что другие приложения читают «старую» версию обновляемых вами строк, вам, возможно, следует подумать об этом. Документация по семантике, принятой в настоящее время

3) Если вы читаете курсор и выборочно обновляете строки в наборе результатов (т. Е. UPDATE myTable ST myIntColumn = 123 WHERE CURRENT OF cursor) и хотите, чтобы DB2 удерживала блокировки на другомСтроки в результирующем наборе, которые не были обновлены, необходимо рассмотреть, используя другой уровень изоляции операторов (т. е. стабильность чтения или повторяемое чтение).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...