каково значение по умолчанию для уровня изоляции IBM Informix - PullRequest
0 голосов
/ 19 ноября 2018

1 хранимая процедура

create procedure sp_count_demo(
i_user_id varchar(30)
)
returning p_count as num_of_row ;

define p_count integer ;

set isolation to dirty read ;

let p_row = 0 ;

select count(*)
into p_count
from some_table a
where a.user_id = i_user_id
;

return p_row;

end procedure ;

2 Процедура в (1) будет вызываться из веб-приложений Java с пулом соединений

3 Нужно ли возвращать уровень изоляции к предыдущему значению, прежде чем возвращать результат? (т. е. чтобы избежать повторного использования соединения другим способом с уровнем изоляции «грязное чтение»)

4 Какой уровень изоляции по умолчанию

5 Где / Как я могу получить значение по умолчанию для уровня изоляции

Заранее спасибо

1 Ответ

0 голосов
/ 20 ноября 2018

Поскольку пул соединений используется, хранимая процедура должна вернуть уровень изоляции к своему предыдущему значению, чтобы избежать непредвиденных результатов, когда другое приложение использует такое же соединение. Уровень изоляции по умолчанию зависит от режима ведения журнала базы данных:

  • Для незарегистрированной базы данных это будет "Dirty Read" (отображается как NL командой onstat -g ses).
  • Для базы данных режима ANSI это будет «Повторяемое чтение».
  • Для других зарегистрированных баз данных это будет «Committed Read».

Параметр onconfig USELASTCOMMITTED также можно использовать для изменения способа использования уровня изоляции по умолчанию. Дополнительную информацию об этом можно найти в Центре знаний (поиск по USELASTCOMMITTED).

Сессия может определить свой текущий уровень изоляции, используя запрос к базе данных sysmaster. Этот запрос был запущен в Informix 12.10, но также должен быть действительным для 11.70:

select tx.isolevel
from sysmaster:systxptab tx, sysmaster:sysrstcb r, sysmaster:sysscblst s
where s.address = r.scb and tx.owner = r.address
and s.sid = dbinfo("sessionid");

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

...