как заблокировать таблицу в DB2 без ожидания - PullRequest
0 голосов
/ 15 мая 2018

Я хочу заблокировать таблицу в DB2 (версия 11) и не хочу, чтобы другие люди ожидали моей блокировки при попытке обновить заблокированную таблицу. (Выдается исключение или возвращается код ошибки)

Я использовал следующую команду: LOCK TABLE MYTABLE В ЭКСКЛЮЗИВНОМ РЕЖИМЕ

Но другие соединения всегда ждут.

Так есть ли способ перестать ждать?

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Может быть, другие пользователи могут использовать незафиксированные чтения WITH UR?

https://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.1.0/com.ibm.db2.luw.sql.ref.doc/doc/r0059225.html

В качестве альтернативы, возможно, вы могли бы использовать IN SHARE MODE вместо EXCLUSIVE lock

https://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.1.0/com.ibm.db2.luw.sql.ref.doc/doc/r0000972.html

0 голосов
/ 15 мая 2018

Для Db2 в Linux / Unix / Windows: если вы используете 'LOCK TABLE ... В ЭКСКЛЮЗИВНОМ РЕЖИМЕ', тогда другие соединения будут ждать, пока вы совершите / откат.

Для Db2 в Linux / Unix / Windows по умолчанию другие соединения будут ожидать LOCKTIMEOUT секунд (по умолчанию = -1 = ждать вечно) или любого другого приложения, настроенного вего соединение либо через SET CURRENT LOCK TIMEOUT (которое может включать установку NOT WAIT или другие значения), либо в конфигурации Db2-клиента другого приложения.Смотри документацию здесь .

Для параметров конфигурации на стороне клиента (db2cli.ini, db2dsdriver.cfg, атрибуты соединения и т. Д.) См. Подробности в центре знаний Db2.

Важно понимать, что либо это другие приложения, которым необходимо настроить время ожидания блокировки (либо в своем коде, либо в конфигурации Db2-клиента), либо параметр базы данных LOCKTIMEOUT определит продолжительность их ожидания.

Итак, вкратце, если вы хотите, чтобы другие приложения не ожидали, то эти приложения должны быть запрограммированы / сконфигурированы для этой цели, или конфигурация базы данных LOCKTIMEOUT должна быть настроена соответствующим образом или оба из них.

InНа практике это означает, что вам нужно либо избегать блокировки таблиц в монопольном режиме (неявно или явно), либо выполнять это в самое тихое время и поддерживать продолжительность блокировки как можно короче.В частности, ваша работа не может сказать другим Db2-соединениям, как настроить их поведение ожидания блокировки!

...