IBMInformix设置隔离级别的默认值是多少



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 Web应用程序调用

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

4默认的隔离级别是什么

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

提前感谢

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

  • 对于一个未标记的数据库,它实际上是"脏读"(通过onstat-g-ses命令显示为NL(
  • 对于ANSI模式数据库,它将是"可重复读取">
  • 对于其他记录的数据库,它将是"提交读取">

onconfig参数USELASTCOMMITTED也可用于更改默认隔离级别的使用方式。有关这方面的更多信息可以在知识中心找到(在USELASTCOMITTED上搜索(。

会话可以使用对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");

它将隔离级别作为一个整数返回,该整数是一个内部值,例如committed-read的值为2。我不相信隔离级别到整数值的映射已经发布,所以您需要尝试为会话设置不同的级别,然后运行上面的查询。

最新更新