SQLServer 表分区 根据时间自动扩展分区

前提条件

  1. 已经创建好分区方案
  2. 已经创建好分区函数

创建文件组

'alter database ' + @Database + ' add filegroup ' + [@fileGroupName]

创建文件并且将文件加入文件组

'alter database ' + @Database + ' add file ' +
           '( ' +
           'name = ''' + @FileName + ''',' +
           'filename = ''' + @FilePath + '\' + @FileName + '.mdf '',' +
           'size = ' + @FileSize + ',' +
           'filegrowth = ' + @FileGrowth + ',' +
           'maxsize = ' + @FileMaxLimit + '' +
           ')' +
           'to filegroup ' + @FileGroupName

修改分区方案

 'alter partition scheme ' + @SchemeName + ' next used ' + @FileGroupName 

修改分区函数

这里注意range函数内日志格式,如果日志格式不对则会上下界限问题

 'alter partition function ' + @PartitionName + ' split range (' + CONVERT(varchar(30), getdate(), 120) +')'

创建存储过程

  1. 以下存储过程是将上面每个步骤的整合
  2. 增加分区是针对分区方案和分区函数的,单纯增加分区这块来看,对表没有直接操作
  3. 基于第二条,凡是用了以上方案和函数的表都会增加分区
  4. 以下代码可以将exec替换成print 看从之态输出测试后在正式运行
  5. 如果想拿来就用建议测试测试,想深入点去官网看把…
create procedure AutoExtendTrainMainDataPartition
as
begin
    declare
        @FilePath                      varchar(100),--文件路径
        @FileName                      varchar(100),--文件名称
        @FileSize                      varchar(100),--文件大小
        @FileGrowth                    varchar(100),--文件增长
        @FileMaxLimit                  varchar(100),--文件最大限制
        @FileGroupName                 varchar(100),--文件组名称
        @Database                      varchar(100),--操作数据库
        @CurrentDateTimeByYearAndMonth varchar(100),--当前时间,年月
        @SchemeName                    varchar(100), --分区方案名称
        @PartitionName                 varchar(100), --分区名称
        @Random                        smallint,
        @sql                           varchar(400)


-- 赋值文件属性
    set @FileSize = '3MB'
    set @FileGrowth = '10%'
    set @FileMaxLimit = 'unlimited'
    set @CurrentDateTimeByYearAndMonth = left(CONVERT(varchar(30), getdate(), 112), 6)
    set @FileName = 'TrainMainData_' + @CurrentDateTimeByYearAndMonth
    set @Random = cast(ceiling(rand() * 20) as int) -- 获取随机数,利用随机数决定当前执行脚本存放那块硬盘
    if @Random % 2 = 0
        set @FilePath = 'W:\yibiao\TrainMainDataPartitions'
    else
        set @FilePath = 'Y:\yibiao\TrainMainDataPartitions'

-- 赋值数据库属性
    set @Database = 'YiBiaoData'

-- 赋值文件组属性
    set @FileGroupName = 'TrainMainData_' + @CurrentDateTimeByYearAndMonth

-- 赋值分区属性
    set @SchemeName = 'AutoExtendScheme'
    set @PartitionName = 'AutoExtendPartition()'


--创建文件组
    set @sql = 'alter database ' + @Database + ' add filegroup ' + @fileGroupName + ''
    exec(@sql)

    --创建组文件,将文件绑定于文件组
--创建文件,指定文件组
    set @sql = 'alter database ' + @Database + ' add file ' +
               '( ' +
               'name = ''' + @FileName + ''',' +
               'filename = ''' + @FilePath + '\' + @FileName + '.mdf '',' +
               'size = ' + @FileSize + ',' +
               'filegrowth = ' + @FileGrowth + ',' +
               'maxsize = ' + @FileMaxLimit + '' +
               ')' +
               'to filegroup ' + @FileGroupName
    exec(@sql)

-- 修改分区方案
    set @sql = 'alter partition scheme ' + @SchemeName + ' next used ' + @FileGroupName + ''
    exec(@sql)

-- 修改分区函数
    set @sql = 'alter partition function ' + @PartitionName + ' split range (' + CONVERT(varchar(30), getdate(), 120) +
               ')'
    exec(@sql)


end
go

利用各种定时任务执行以上存储过程

由于分区界限和分区名称等都是用时间为准,建议每月第一天最早时间执行

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL Server 支持按月自动扩展分区的功能,需要使用到 Partition Function 和 Partition Scheme,在创建时需要指定分区的范围和分区方式。具体步骤如下: 1. 创建分区函数 ``` CREATE PARTITION FUNCTION pf_monthly(datetime) AS RANGE RIGHT FOR VALUES ( '20210101', '20210201', '20210301', '20210401', '20210501' ); ``` 这里使用 datetime 类型作为分区函数的参数,指定了分区的范围为每个月的第一天。 2. 创建分区方案 ``` CREATE PARTITION SCHEME ps_monthly AS PARTITION pf_monthly TO ( [PRIMARY], [PARTITION Jan2021] , [PARTITION Feb2021] , [PARTITION Mar2021] , [PARTITION Apr2021] , [PARTITION May2021] , [PARTITION AllOthers] ); ``` 这里创建了一个分区方案,将分区函数 pf_monthly 分成了六个分区,前五个分区分别对应每个月,最后一个分区 AllOthers 则包含了所有没有被分区的数据。 3. 创建并指定分区方案 ``` CREATE TABLE Sales ( SaleDate datetime, SaleAmount money ) ON ps_monthly(SaleDate); ``` 这里创建了一个 Sales ,并将 SaleDate 列作为分区键,指定了分区方案为 ps_monthly。 4. 添加分区 当需要添加新的分区时,可以使用 ALTER PARTITION FUNCTION 命令进行添加。例如,要添加 20210601 到 20210701 的分区,可以执行以下命令: ``` ALTER PARTITION FUNCTION pf_monthly() ADD RANGE ('20210601', '20210701'); ``` 这样就会在分区函数中添加一个新的分区范围,然后可以使用 ALTER PARTITION SCHEME 命令将新的分区添加分区方案中。 注意,如果需要自动扩展分区,可以使用 SQL Server Agent 的作业来自动执行添加分区的命令。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值