2

MSDN对其 OLEDB 提供程序的 JET 事务隔离描述如下:

Jet 在事务中支持五层嵌套。唯一支持的事务模式是已提交读。设置较低级别的事务分离意味着已提交读。设置更高的级别将导致 StartTransaction 失败。

Jet 仅支持单阶段提交。

MSDN描述Read Committed如下:

指定在读取数据时保持共享锁以避免脏读,但可以在事务结束之前更改数据,从而导致不可重复读取或幻像数据。此选项是 SQL Server 的默认选项。


我的问题是:

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

  2. 上面描述的 Read Committed 隔离级别是否适合我的要求

  3. 使用 Jet 实现可序列化事务隔离的最佳方法是什么?
4

1 回答 1

1

按问题编号:

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

  2. 是的,如果您检查UPDATE语句本身中的条件;否则你可能会遇到问题。

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

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

于 2012-08-18T12:36:23.957 回答