【发布时间】:2020-01-20 21:31:52
【问题描述】:
我有一个越来越大的数据库,但客户只对最近 2 年的数据感兴趣。但他们希望保留旧数据“以防万一”。
现在我们想通过 WAN 将数据归档到不同的服务器。
我的计划是创建一个存储过程:
- 将查找表、包含主数据的表和外键表中的所有数据复制到存档服务器。
- 将事务表中的数据复制到存档数据库。
- 从主数据库中删除超过 2 年的事务数据。
虽然该方法理论上可以满足我们的需求,但存在两个主要问题:
性能:我正在通过 SQL 链接服务器复制数据。有些大表真的很慢,因为它需要比较哪些记录存在然后更新它们,不存在的记录需要创建。好像会在 3-4 小时内运行。
我们需要以正确的顺序复制表以防止外键违规,并且与自身有关系的表(例如带有 ParentCustomer 字段的客户表)需要在没有 ParentCustomer 的情况下转移然后需要更新 ParentCustomer 以防止 FK 违规。因此,自动生成我的插入和更新语句变得很困难(我想尽可能地自动生成我的语句)。
我只是觉得可能有更好的方法来归档我还不知道的数据。 SSIS 可能是一种选择,但不确定它是否会阻止我现有的挑战。我对 SSIS 了解不多,所以如果是这样的话,我可能需要找一些材料来研究它。
【问题讨论】:
-
一个建议:跨多个主轴或 ssd 分区表。保留当前和历史的滑动窗口分区。当前数据将从一个磁盘读取,另一个从较慢的磁盘读取。
-
我同意 - 不要假设您需要跳过箍来归档数据。首先研究分区(您可以透明地将数据移动到另一个磁盘)和集群列存储索引(压缩数据并提高性能)
标签: sql-server ssis archive linked-server