0

我正在使用 .Net 1.1 和 SQL Server 2000 构建企业应用程序。我使用读提交隔离级别。然而,非功能性需求的变化使得有必要对不可重复读取和幻像采取措施。我看到两个选项:

  1. 引入行版本控制以检查行在事务中读取后是否已被修改。这是通过将 VersionId 列添加到表 abd 来完成的,该列在行更改时递增该值。这将解决问题,但需要我们重写所有存储过程和应用程序的数据访问层。

  2. 迁移到 SQL Server 2005 并使用快照隔离级别。这样可以省去我们重写代码的麻烦,但也有一些挑战:快照隔离级别在 .Net 1.1 中是未知的,因此我们必须额外往返服务器以手动设置它。湾。我们不能在存储过程中使用临时表,因为快照隔离级别不允许更改 tempdb 的架构。我不知道如何解决这个问题。

任何想法或建议都非常好

4

2 回答 2

1

我建议您升级到 2005/2008 并启用读取提交快照选项。一旦启用,它会使任何要求读取已提交的事务使用行版本控制而不是锁。与完整快照隔离相比,它对 TempDB 的影响也较小。

您在使用临时表和快照时遇到什么问题?我可以毫无问题地在快照隔离中创建临时表。我知道的唯一限制是您是否使用全局临时表。要使全局临时表正常工作,必须ALLOW_SNAPSHOT_ISOLATION启用 tempDB,或者必须将锁定提示添加到查询中以将语句更改为另一个隔离级别。

于 2008-10-28T14:49:56.207 回答
0

关于选项#2的一些想法:

您无需额外往返服务器。我可以想到大约 3 种不同的方法来避免它,包括将命令预先添加到您现有的查询字符串、移动到存储过程并将其设置在那里等。
此外,您可以绕过 SQL Server 2005 并直接进入 SQL Server 2008 ,现在已经出来了。

如果您使用选项 #1,请查看将时间戳数据类型用于您的 versionid 列。

于 2008-10-14T18:16:21.437 回答