如何使用SSIS归档相关数据(在不同的表中)

Mr *_*ubs 2 database ssis data-warehouse archive

在我们的数据库中的许多表中存在许多(较旧的)相关数据,这些表需要归档到单独的数据库,然后从原始数据库中删除(可能每天).归档(和删除)的内容由业务规则决定.我们不希望此存档中有更新的数据(它会更改并经常访问).如果需要并可能报告,某些归档数据可能需要转回.

我需要在SSIS中提出一个高效且易于维护的解决方案.我至少可以想到三种方法:

  1. 编写一个包含大量左连接的大型select语句来获取我想要的所有数据,然后在内存中查看这些数据或将其存储在临时表中
  2. 按表格工作,选择作业,然后选择其他表格中的相关数据
  3. 类似于第一种方法,只是将数据转储到去规范化的表中(看起来像一个懒惰的方法?)

我考虑过临时表,虽然我没有看到这种情况下的好处 - 我可以使用时间戳(时间戳=进程已启动)将数据直接复制到存档表,然后在完成时,去删除时间戳为时间戳的ID过程开始的时间.一旦我确定了工作ID,我就知道其他需要存档的数据.

我正在寻找最佳方法,有没有人有另一种方法?其他人如何实现这一目标?

Phi*_*ley 6

听起来你需要两个进程,一个用于存档旧数据,另一个用于重新加载存档数据.我将用以下方法解决这两个问题.

对于存档数据:

  • 首先,使用您的业务规则,确定需要归档的数据.总的来说,这意味着构建一个临时表(或数据集),其中只包含要存档的数据的键.以发票为例,我只收集要存档的发票的ID,这应该足以识别所有相关的子数据(发票行项目,运费和付款信息等).您可能需要多个这样的集合,例如用于存档发票,客户和销售人员,因为没有一个"完全包含"在另一个中.
  • 确保这些集合是完整和完整的(也就是说,它们不包含破坏的父/子关系).基于这些数据集的所有后续工作将确保不会无意中"滑入".
  • 接下来,遍历并将这些集合中标识的数据从源数据库复制到存档数据库.
  • 当所有数据都已正确复制(并且仅在此之后)时,请返回并从源表中删除此数据.

对于重新加载数据,它几乎是相同的过程,但是从归档集到"实时"集合.特别考虑因素包括:

  • 如果重新加载,可以修改数据吗?如果是这样,那么你可能需要将其从存档中删除,因为当它最终被重新存档时,它可能已被修改.那,或者你必须允许两次归档同一组数据!
  • 您可能希望以某种方式标记重新加载的数据,以便下次存档运行时不会立即重新存档.

无论使用工具SSIS还是其他方法,此方法都可以使用.