IBM Informix集隔离级别的缺省值是多少

时间:2018-11-19 09:22:53

标签: connection informix pool isolation

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 webapps中调用

3返回结果之前,我是否需要将隔离级别设置回先前的值? (即避免另一个进程重用该连接以使其具有“脏读”隔离级别)

4默认隔离级别是什么

5在哪里/如何获得隔离级别的默认值

预先感谢

1 个答案:

答案 0 :(得分:2)

由于正在使用连接池,因此存储过程应将隔离级别返回到其先前的设置,以避免在另一个应用程序使用同一连接时出现意外结果。默认隔离级别取决于数据库的日志记录模式:

  • 对于未记录的数据库,它实际上将是“脏读”(由onstat -g ses命令显示为NL)。
  • 对于模式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。我不认为隔离级别到整数值的映射已发布,因此您需要尝试设置不同的级别进行会话,然后运行上面的查询。