SQL Server 数据库太大,想把前几年的老数据挪出去只留新数据,怎么弄?
思路先说清:不是"删老数据",而是把历史数据搬到归档库,生产库只留活跃数据。搬的标准动作是按时间字段批量迁移,搬完核对行数,全程小批量事务,避开业务高峰。
动手前的三件准备
先给生产库做一次全量备份,这一步不可跳过。再确认老数据的边界:按哪个时间字段切、切到哪一天,和业务方对齐口径,别凭感觉划线。最后确认归档落点——另一台机器上的归档库、同机新建的归档库,或者导出成备份文件另行保存,三种都行,关键是归档数据也要有备份。
搬迁的两种做法
做法一,跨库批量搬迁:在归档库建同结构的表,用"插入—删除"配对的方式,按主键范围或时间分批,每批几千到几万行,一批一个事务。分批的目的有两个:不撑大日志,不长时间锁表影响在线业务。每批搬完记录行数,全部搬完后对总数,两边对得上才算完成。
做法二,分区表切换:数据量特别大、以后还要持续归档的库,把大表改造成按时间分区,历史分区用分区切换的方式整体挪到归档表,速度快得多。代价是要预先设计分区方案,适合有 DBA 资源的团队。
迁移中的注意点
外键约束先理清:老数据若被新表引用,直接删会失败,先把引用关系理顺或按依赖顺序搬。触发器和审计逻辑会干扰批量删除,迁移窗口内确认这些对象的行为。大字段(图片、附件列)占比高的表,批量行数要再调小。日志文件提前确认增长空间和恢复模式,别让日志把盘顶满。
搬完之后的事
归档库做一次全量备份,之后按低频率维护即可。生产库这边,把索引重建或重组一轮,收回搬迁后的空间碎片;统计信息更新,让查询计划回到正常水平。业务查询如果还要偶尔摸历史数据,建一个跨库视图或约定好"新数据查生产、老数据查归档"的口径,别让报表开发到处改连接串。
养成节奏
归档不是一次性的活,数据每年都在长。定成制度:每年固定时间归档上一年度数据,生产库水位长期稳定,备份和恢复的速度也跟着稳定下来。顺带把两个监控挂上:生产库的容量增长曲线和归档库的行数台账,涨速突然变陡说明有业务在批量写历史数据,先问清楚再动手。归档库如果常年无人查询,还可以把备份频率降档,介质投入跟着降下来。
贵州诚鑫致达科技帮客户做数据库瘦身时,坚持先备份、小批量、可核对的三原则,历史数据搬得出去、对得上数、回得来,生产库该瘦瘦、业务该跑跑。
企业存储选型参考|贵州诚鑫致达
做高可用与业务不间断保障,群晖机型参考:PAS7700 · RS2423RP+ · SA3410。需要选型建议或上门评估,搜「诚鑫致达」即可找到我们。
服务区域|贵州诚鑫致达
贵州群晖NAS、贵阳存储、数据备份、信创云盘或 IT 集成服务,可联系贵州诚鑫致达科技,服务范围覆盖贵州全省各市州。重庆企业 NAS 存储、服务器运维与容灾备份方案。