Если вы используете RHEL и запускаете операторы SQL в командной строке оболочки (bash или ksh и т. Д.).тогда вам нужно понять поведение автокоммитов по умолчанию.
Позаботьтесь об использовании правильного синтаксиса SQL для версии и платформы Db2-сервера.Они различаются между Linux / Unix / Windows и i-Series и Z / OS.Каждая платформа может вести себя по-разному, и разные настройки для каждой платформы могут регулировать поведение блокировки.
Db2 CLP в Windows / Linux / Unix будет автоматически фиксироваться по умолчанию.Таким образом, любые блокировки, принятые оператором, немедленно снимаются при завершении оператора, когда происходит автоматическое принятие.Это объясняет, почему (в разных сеансах) вы не можете заставить ждать блокировки - блокировка уже снята!
Таким образом, наблюдаемое поведение правильное - работает так, как задумано, а не то, что вы неправильно вообразили.Вы можете изменить поведение по умолчанию, выборочно отключив автокоммит.
Чтобы отключить автокоммит, у вас есть разные варианты.Вы можете сделать это в командной строке CLP, чтобы повлиять на текущую командную строку (используйте опцию + c), или вы можете использовать переменную окружения DB2OPTIONS , чтобы установить ее навсегда для сеанса (обычно плохой)идея), или вы можете включить / отключить автоматическую фиксацию «на лету» внутри скрипта с помощью команд update command options using c off;
и update command options using c on;
.
Чтобы отключить автоммит в командной строке Db2 CLP, только для одногооператора, затем используйте опцию + c, например:
db2 +c "select COL from mdmsysdb.test WITH RS USE AND KEEP EXCLUSIVE LOCKS"
Когда вы отключите автокоммит, вы несете ответственность за выполнение явного подтверждения или отката.Если вы использовали опцию + c, любая команда db2, которая опускает эту опцию, вернется к поведению по умолчанию или к DB2OPTIONS, если она установлена.Таким образом, вы должны знать, что вы делаете, и тщательно проверять.