Sql server 2005 SQL Server并发问题

Sql server 2005 SQL Server并发问题,sql-server-2005,Sql Server 2005,我有一个位于视图顶部的报告。视图基础表每15分钟更新一次,更新周期约为1-2分钟,在这段时间内,如果我运行报表,我会在报表上获取错误的值。是否有方法可以对视图应用某种锁定,以便在更新完成后获取报表,并避免报表上的脏数据。请请告诉我是否有其他解决此问题的方法 谢谢, Ravi < P>是否考虑在可重复读取或序列化隔离模式中检索报表数据?< P>我会考虑使用不同的方法来更新基础表。不要更新这些表1-2分钟,而是在另一个模式中创建“影子”表。(并且有第三个模式用于临时保留。)这允许您处理用户看不到的

我有一个位于视图顶部的报告。视图基础表每15分钟更新一次,更新周期约为1-2分钟,在这段时间内,如果我运行报表,我会在报表上获取错误的值。是否有方法可以对视图应用某种锁定,以便在更新完成后获取报表,并避免报表上的脏数据。请请告诉我是否有其他解决此问题的方法

谢谢,
Ravi

< P>是否考虑在可重复读取或序列化隔离模式中检索报表数据?

< P>我会考虑使用不同的方法来更新基础表。不要更新这些表1-2分钟,而是在另一个模式中创建“影子”表。(并且有第三个模式用于临时保留。)这允许您处理用户看不到的表,然后使用简单的元数据操作将它们切换到中。然后你可以这样做:

  • 截断/重新填充卷影表(2分钟或更短时间,无争用)
  • 启动事务(亚毫秒)
  • 使用ALTER schema将主表移动到保留模式。。。传输(亚毫秒)
  • 将阴影表移动到dbo模式(亚毫秒)
  • 将主表移动到卷影架构(亚毫秒)
  • 提交事务(亚毫秒)
  • (可选)截断阴影表以恢复一些空间(亚秒)
  • 这个解决方案的一个缺点是,您需要维护两组统计数据、索引等。对于统计数据,如果数据只是在增加,而没有发生实质性的变化,则应该是可以的

    亚当·海恩斯(Adam Haines)在这里对这种方法(我几年前向他展示过)有一篇非常透彻的评论:


    与Aaron Bertrand的答案类似,但使用同义词:

    在本例中,有两个同义词:一个表示“要加载的表”,另一个表示“要查询的表”

    各种CREATE语句可以包装在必须升级权限的存储过程中


    根据你对Aaron回答的评论,你必须有一些转换的方法。提高并发性的唯一方法是使用多个表。

    我不知道serializable是否是一个好答案。我怀疑OP试图增加并发性,而不是消除它。:-)你好,Aaron,谢谢你的解决方案,但我对数据库没有任何权限,也没有遵循这种方法的权限。有没有其他方法可以使用“select语句”实现,因为我只有对数据库的读取权限。谢谢