JET中的事务隔离?

时间:2012-08-18 01:06:36

标签: database ms-access oledb jet isolation-level

MSDN描述了其OLEDB提供程序的JET事务隔离,如下所示:

  

Jet支持事务中的五个嵌套级别。唯一的   支持的事务模式是Read Committed。设置较小   事务分离级别意味着Read Committed。设置   更高的级别将导致Star​​tTransaction失败。

     

Jet仅支持单阶段提交。

MSDN描述Read Committed如下:

  

指定在读取数据时保留共享锁   避免脏读,但数据可以在结束之前更改   事务,导致不可重复的读取或幻像数据。这个   option是SQL Server的默认值。


我的问题是:

  1. 什么是单阶段提交?这对交易和隔离有什么影响?

  2. 如上所述的Read Committed隔离级别是否适合我的要求here

  3. 使用Jet实现Serializable事务隔离的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

问题编号:

  1. 单阶段提交用于所有数据都在一个数据库中的情况 - 事务活动是以原子方式提交的,您已完成。如果您有一个逻辑事务需要分布在多个存储引擎(如元数据的关系数据库和某种大型blob的文档存储),您可以使用事务管理器来协调活动如果两个产品都支持两阶段提交,那么工作将持续存在于两者中或两者都不存在。他们只是告诉你他们支持两阶段提交,因此该产品不适合分布式事务。

  2. 是的,如果您检查UPDATE声明中的条件;否则你可能会有问题。

  3. 他们似乎暗示你不能。

  4. 顺便说一句,几十年来,我在各种环境中担任顾问。由于性能问题,我不止一次从事人员 off 。在一种情况下,一个简单的“星型”查询运行了两分钟,因为它正在加入客户端而不是让数据库这样做。作为对数据库的直接查询,它是亚秒级的。在另一个案例中,有一个报告需要72小时才能通过Jet运行,直接针对数据库运行需要2分钟。如果它通常对您有效,那么您可以通过使用Jet导致性能下降的存储过程来处理这种情况。