zoukankan      html  css  js  c++  java
  • SqlServer自动化分区

    1、新增文件组

    ALTER DATABASE [Test] ADD FILEGROUP FG2010
    ALTER DATABASE [Test] ADD FILEGROUP FG2011
    ALTER DATABASE [Test] ADD FILEGROUP FGAll

    2、新增分区文件

    ALTER DATABASE [Test] ADD FILE (NAME='File2010',FILENAME=N'D:Program FilesDataFile2010.ndf') TO FILEGROUP FG2010
    ALTER DATABASE [Test] ADD FILE (NAME='File2011',FILENAME=N'D:Program FilesDataFile2011.ndf') TO FILEGROUP FG2011
    ALTER DATABASE [Test] ADD FILE (NAME='FileAll',FILENAME=N'D:Program FilesDataFileAll.ndf') TO FILEGROUP FGAll

    3、创建分区函数

    --该分区函数创建3个分区(<=2010-01-01、2010-01-01~2011-01-01,>2011-01-01)
    --RANGE LEFT标识边界值在左边

    CREATE PARTITION FUNCTION OrderPartitionFn(datetime)
    AS RANGE LEFT
    FOR VALUES('2010-01-01','2011-01-01')

    4、创建分区方案

    CREATE PARTITION SCHEME OrderPartitionScheme
    AS PARTITION OrderPartitionFn
    TO 
    (
        FG2010,
        FG2011,
        FGAll
    )

    5、创建分区表

    CREATE TABLE OrderRecords
    (
        Id uniqueidentifier,
        CreateTime datetime,
        Total int,
    )
     --OrderPartitionScheme是刚刚定义的分区架构,括号内为指定的分区列
    ON OrderPartitionScheme(CreateTime)

    6、定义执行自动分区操作

    使用sql job 定期执行操作

    DECLARE @maxValue DATETIME,
        @fileGroupName VARCHAR(200),
        @fileNamePath    VARCHAR(200),
        @partitionFnName VARCHAR(200),
        @schemeName VARCHAR(200),
        @fileName   VARCHAR(200),
        @sql        NVARCHAR(1000)
    
    --分区函数
    SET @partitionFnName='OrderPartitionFn';
    --分区方案
    SET @schemeName='OrderPartitionScheme';
    
    --获取当前分区函数最大边界值
    SELECT @MaxValue = Convert(datetime,MAX(value))
    FROM SYS.PARTITION_RANGE_VALUES PRV
    LEFT JOIN SYS.partition_functions fun on prv.function_id=fun.function_id
    WHERE FUN.name=@partitionFnName--分区函数名
    
    SET @fileGroupName='FG'+CONVERT(varchar,(YEAR(@MaxValue)+1))
    
    --D:Program FilesDataFile2016.ndf
    SET @fileNamePath='D:Program FilesDataFile'+ CONVERT(varchar,(YEAR(@MaxValue)+1))+'.ndf'
    --File2016
    SET @fileName=N'File'+ CONVERT(varchar,(YEAR(@MaxValue)+1))
    
    --使用ALTER语句新增一个文件组
    SET @sql='ALTER DATABASE [Test] ADD FILEGROUP '+@fileGroupName
    PRINT @sql
    EXEC(@sql)
    
    SET @sql='ALTER DATABASE [Test] ADD FILE (NAME='''+@fileName+''',FILENAME=N'''+@fileNamePath+''') TO FILEGROUP'+' '+@fileGroupName
    PRINT @sql
    EXEC(@sql)
    --修改分区方案,用一个新的文件组存放下一新增的数据
    SET @sql='ALTER PARTITION SCHEME ['+@schemeName+'] NEXT USED'+' '+@fileGroupName
    PRINT @sql;
    EXEC(@sql)
    
    SET @sql='ALTER PARTITION FUNCTION '+@partitionFnName+'() SPLIT RANGE ('''+Convert(varchar,DATEADD(YEAR,1,@maxValue),120)+''')';
    print @sql;
    EXEC(@sql)
  • 相关阅读:
    奇虎董事长周鸿祎:谁说没钱不能创业
    分析.NET基础库源码,学习Stream类及相关类
    Why need two IF in singleton pattern in the multiple threads scenario
    It's bad design that leveraging singleton design pattern in db connection
    Asp.net mvc 3 JSONResult return array
    System.Web.HttpContext.Current vs. ControllerContext.HttpContext (almost the same)
    Nhibernate HQL example paging and avoid sql injection
    Asp.net mvc 3 JSON complext object mapping
    Nhibernate configuration in app.config with log4net enabled 0 of 4
    Setup and run a simple nhibernate example
  • 原文地址:https://www.cnblogs.com/Jabben_Yi/p/5699764.html
Copyright © 2011-2022 走看看