我有一个相当大的数据库,但客户只对过去两年感兴趣'数据。但他们希望保留较旧的数据"只是在案例中#34;。
现在我们希望通过WAN将数据存档到其他服务器。
我的计划是创建一个存储过程:
虽然这种方法能够从根本上满足我们的需求,但主要的两个问题是:
性能:我通过SQL链接服务器复制数据。一些大表格非常慢,因为它需要比较哪些记录存在然后更新它们,并且需要创建不存在的记录。好像它会在3-4个小时内运行。
我们需要以正确的顺序复制表以防止外键违规,并且还需要在没有ParentCustomer的情况下传输与自身有关系的表(例如,带有ParentCustomer字段的Customers表)然后需要更新ParentCustomer以防止FK违规。因此,自动生成我的Insert和Update语句变得很困难(我想尽可能自动生成我的语句)。
我只是觉得可能有一种更好的存档方式,我还不知道。 SSIS可能是一种选择,但不确定它是否会阻止我现有的挑战。我对SSIS了解不多,所以如果可行的话,我可能需要找一些材料来研究它。
答案 0 :(得分:1)
我认为您需要一个将作为计划任务运行的批处理;也许每天晚上。有两个选项,您已经讨论过了:
1)SQL代理作业,执行存储过程。存储过程将使用链接服务器。
2)SQL Agent Job,它将执行SSIS包。
我相信您可以从两种方法的组合中受益,这将避免使用Linked Serverd。以下是步骤:
1)SQL代理作业执行SSIS包,该包将要从实时数据库存档的数据传输到复制数据库。这应该按特定顺序进行,以避免外键违规。
2)一旦SSIS包执行了传输,它就会在实时数据库上执行存储过程,删除超过两年的信息。存储过程不需要任何链接服务器。
您必须使用事务来确保不存档重复数据。例如,如果SSIS包失败,则应回滚事务并且不应执行存储过程。