关于新增分区过程中遇到的问题(续)

本文探讨了数据库分区的管理策略,包括自动批量新增文件与文件组、定期执行清理过期数据的Job,以及如何通过Job实现历史数据的自动清理,同时介绍了定期清理不再使用的分区文件的方法,以保持数据库的高效运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

昨天说到新增了分区,我们实现了自动批量新增文件和文件组.大家可以考虑后续做成JOB定期执行,每个月月底执行一下,新增三个月之后的分区,这样一旦有JOB失败能够有缓冲的时间.

今天我们了看看删除分区数据的事情.

昨天我们说存在定期删除过期数据的JOB,所以如果分区太长时间没有新建,将造成不可挽回的错误:删除数据.

那这个定期删除过期数据的是怎么做的呢.

首先,对于分区表来说,每个分区规则制定后,所有符合规则的数据会存放在固定的逻辑文件组中,而这个(这些)文件组会对应于某一个具体的物理文件.

而某个分区方案是可以对应多个分区表的,所以,我们就可以新建一个结构和分区方案与原表一样的新表(归档表).

这样可以通过下面的SQL脚本来将旧表中某个指定分区的数据滑动到新表中,这时候这部分数据就属于新表了,然后执行truncate table清除新表就可以删除这个分区中的全部数据了.

use [DataBase]
GO
DECLARE @PartitionId INT = DATEDIFF(DAY,'2015-04-01','2015-12-10')+2
select @PartitionId
ALTER TABLE OldTable SWITCH PARTITION @PartitionId TO NewTable PARTITION @PartitionId
GO
--truncate table NewTable


定时JOB中部署上述的作业就可以实现相关自动清理历史数据的效果.

 

其实我还关心一个事情就是,被清理掉的分区中的数据是没有了,但是文件和分区方案边界还是一直存在,所以在后续会越来越多的产生不在使用的小文件,虽然小但会逐渐影响系统的响应速度.

所以我使用如下方法去定期清理相关文件:

ALTER PARTITION FUNCTION [parfunDay]()
    MERGE RANGE ('2015-04-01')

使用昨天的循环脚本,执行到指定的归档日期即可.
然后执行下面的脚本删除对应的文件和文件组

ALTER DATABASE [Database] REMOVE FILE [PartitionDB_FG-2015-04-01]
ALTER DATABASE [Database] REMOVE FILEGROUP [PartitionDB_FG-2015-04-01]


PS:所有有办法用JOB实现的自动新增和自动删除的工作都是有规律可循的.比如这两篇的文件名或者文件组名或者分区方案及分区函数均以日期为区分.所以在新增和清理时都可以根据日期来处理.

 

转载于:https://www.cnblogs.com/qkiori/p/5102510.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值