我的报告位于视图之上。基础表的视图每15分钟更新一次,更新周期大约需要1-2分钟,在此期间,如果我运行报告,我的报告中的值会出错。是否有一种方法可以应用某种锁在视图上,以便我可以在更新完成后获取报告并避免报告中的脏数据。如果此问题还有其他解决方案,请告诉我
谢谢, 拉维
答案 0 :(得分:1)
我会考虑使用不同的方法来更新基础表。不要在1-2分钟内更新这些表,而是在另一个模式中创建“shadow”表。 (并且有第三个用于临时保留的模式。)这允许您处理用户无法看到的表,然后使用元数据操作切换它们。然后你可以这样做:
此解决方案的一个缺点是您将拥有两组统计数据,索引等。对于统计数据,如果数据只是增加而没有显着变化,那么你应该没问题。
亚当·海恩斯(Adam Haines)在这里对这种方法(我几年前向他展示过)进行了非常详尽的论述:
http://jahaines.blogspot.com/2009/10/locking-table-while-it-is-being-loaded.html
答案 1 :(得分:1)
与Aaron Bertrand的答案类似,但使用SYNONYMs:
在这种情况下,您有两个同义词:一个用于“要加载的表”,另一个用于“要查询的表”
可以将各种CREATE语句包装在具有EXECUTE AS OWNER的存储过程中以升级权限。
根据你对Aaron的答案的评论,你有有一些切换方式。增加并发性的唯一方法是使用多个表。
答案 2 :(得分:-1)
您是否考虑过以可重复读取或序列化隔离模式检索报告数据?