我应该使用SQL数据库快照吗?

时间:2011-07-07 11:25:31

标签: sql sql-server-2005 tsql

我的系统需要在特定时间点对特定表格进行快照。

目前,快照查询表中数据的过程,并将输出放入Temp表(如阶段表而不是内存表中)。

其中许多流程可以同时并行运行(每小时100多个)。并且要复制的表可以运行到GB的数据中。

我正在考虑使用数据库快照,因此每个进程都可以使用自己的快照并使用它。

这种方法的优点和缺点是什么?

有没有更好的方法来解决这个问题?

2 个答案:

答案 0 :(得分:2)

我当然会考虑使用快照,但在您决定采用某种方式之前,您需要考虑以下几点:

  • 快照使用稀疏文件来存储数据,实际上只会在创建时将存储的更改存储到每个表中。表中更改的行越多,磁盘相对于简单复制的节省就越小。
  • 快照发生在整个数据库中,而不仅仅是一个表。因此,如果您的数据库非常庞大,并且每小时需要100多份数据库,那么这将耗费大量磁盘空间和性能。另一方面,如果您对所有流程每小时一个快照感到满意,并且数据太多,那么快照可能正是您需要的。
  • 快照将在原始数据库上产生性能开销,因为快照需要与更改的数据保持同步。如果你的表现已经很紧张,这可能是一个问题。

当然还有其他一些事情要考虑,但这不是一个糟糕的起点。 Books OnLine有一篇关于快照使用的相当详细的文章,我在决定之前会阅读。 http://msdn.microsoft.com/en-us/library/ms175158%28v=SQL.90%29.aspx还有一个关于限制的部分:http://msdn.microsoft.com/en-us/library/ms189940%28v=SQL.90%29.aspx

希望这有帮助。

答案 1 :(得分:0)

如果您需要拍摄数据的快照以进行备份/恢复,我建议您使用SQL Server的备份功能(即完整的事务日志备份)。

如果您的目标是从某些表中捕获数据以用于历史目的,那么您可以实现一堆运行类似的SQL作业:

select * 
into archive_table 
from normal_table

确保在执行此操作之前关闭事务日志(即将数据库设置为“简单”),因为这会大大加快此过程。