数据库关系记录存档&恢复

时间:2014-06-15 18:41:30

标签: c# sql sql-server database sql-server-2008

多年前,我创建了一个小型系统来满足将来自Android的快照图像与其各自的自定义数据一起上载到服务器上然后存储在磁盘上并且描述图像的自定义数据被进一步分解的要求存储在数据库中。每个拍摄的图像实际上都是广告系列的一部分。在此期间,该系统继续增长,现在已经有超过10,000个广告系列,每个广告系列超过500-1000张图片。虽然,表现并不是那么糟糕,但我相信这只是时间问题。我们现在正考虑将过去的广告系列归档到另一个名为Archive的数据库中。现在我正在计划这样做。

  1. 存档数据库将具有完全相同的结构,存档功能可能具有搜索机制,但是,检索速度在这里并不是很重要,因为这种情况很少发生。
  2. 我正在考虑从一个数据库中删除记录并将其克隆到另一个数据库中,但是标识列可能不会让我非常无缝地执行此操作。 (我也可能错了。)
  3. 还需要一个恢复选项。 (这可能是最具挑战性的部分)
  4. 如果我只是从原始数据库中将记录留空(除了身份)并将其复制到另一个没有身份限制的记录,可能它没有帮助,我认为它将失去练习的目的。
  5. 对此有何建议?是否有任何已知的策略或模式或文献,甚至是可以指导我的链接?

    提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我认为对你来说很好的解决方案是SSIS。这项技术可以为您提供快速加载大量数据的存档系统。此外,您可以使用表分区来提高Archive系统中大数据操作的性能。还要检查comumnstore索引之类的东西(但它取决于SQL Server的版本)。 我用以下步骤创建了这样的解决方案 1)在生产系统中将分区从主表t切换到另一个表t_1(表中最旧的行) 2)从表t_1向归档系统加载数据 3)删除或截断表t_1

答案 1 :(得分:1)

我说:只要您的服务器上没有空间不足,请保持原样。

  

在此期间,系统继续增长,现在已有超过10,000个广告系列,每个广告系列超过500-1000张图片。

→这是5到数百万行(创造了几年) 对于SQL Server,这并不是那么多 是的,我知道......我们谈论的是存储在数据库中的图像文件,而不是“常规”行。尽管如此,如果您的服务器具有合理大小的硬件,那么它应该并不重要。

我在这里谈论经验 - 在工作中,we have a SQL Server database which we use to store PDF files and images 在我们的案例中,我们使用的是“常规”image列 - 因为您使用的是SQL Server 2008,您甚至可以使用FILESTREAM (也许您已经这样做了,但我不知道知道 - 你没有说出你将图像存储在数据库中的准确性 我们在SQL Server 2005上启动了该项目,其中FILESTREAM尚未可用。与此同时,我们升级到SQL Server 2012,但从未更改我们存储文件的表中的数据类型。


如果您仍然希望创建一个单独的存档数据库并在那里移动旧数据,请提出以下建议:

  

2)我正在考虑从一个数据库中删除记录并克隆它   在另一方面,身份栏可能不会让我这样做   非常无缝。 (我也可能错了。)

     

[...]

     

4)如果我只是将记录留空(除了身份)   原始数据库并将其复制到另一个没有身份的数据库   约束,可能它没有帮助,我认为它会松动   练习的目的。

您也不需要在归档数据库中将列设置为identity 只需保留主数据库中的所有内容,但从存档数据库中的主键中删除identity设置。
归档数据库不需要生成新的密钥(因此不需要identity,您只需从主数据库中复制已有密钥的行。