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 Files\Data\File2010.ndf') TO FILEGROUP FG2010
ALTER DATABASE [Test] ADD FILE (NAME='File2011',FILENAME=N'D:\Program Files\Data\File2011.ndf') TO FILEGROUP FG2011
ALTER DATABASE [Test] ADD FILE (NAME='FileAll',FILENAME=N'D:\Program Files\Data\FileAll.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 Files\Data\File2016.ndf
SET @fileNamePath='D:\Program Files\Data\File'+ 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)

SqlServer自动化分区的更多相关文章

  1. SqlServer 自动化分区方案

    本文是我关于数据库分区的方案的一些想法,或许有些问题.仅供大家讨论.SqlServer (SqlServer 2005\SqlServer 2008)实现分区需要在企业版下进行. SqlServer的 ...

  2. sqlserver表分区与调优与行列转换

    转自: http://www.cnblogs.com/knowledgesea/p/3696912.html http://www.open-open.com/lib/view/open1418462 ...

  3. sqlserver表分区

    参考:http://www.cnblogs.com/knowledgesea/p/3696912.html 及百度搜索sqlserver表分区 create partition function sg ...

  4. SqlServer数据库分区

    在最近的项目中,在尽可能优化了sql语句后,上层仍要求对数据库进行优化,因为考虑到系统上线后数据量会非常庞大,而且这些个表的数据都有明显的时间划分,于是就引入了数据库分区的概念.摘用百度百科的定义,数 ...

  5. (转)SQLSERVER表分区的介绍(一)

    下面进入正题吧,很多时候当单张数据表的数据量比较大的时候比如千万级别条记录.上亿级别记录,如果不做优化,那么查询的效率大家清楚. 有经验的人会通过各种手段做优化,其中表分区就是其中一种手段. 个人对表 ...

  6. sqlserver表分区小结

    为什么要表分区?  当一个表的数据量太大的时候,我们最想做的一件事是什么?将这个表一分为二或者更多分,但是表还是这个表,只是将其内容存储分开,这样读取就快了N倍了 原理:表数据是无法放在文件中的,但是 ...

  7. (转)SQLSERVER表分区的介绍(二)

    分区函数和分区方案的创建和使用方法 具体设计过程如下: (1)首先创建一个名为partionTest的数据库.然后分别为数据库partionTest添加四个文件组,文件组名依次为FileGroup00 ...

  8. sqlserver中分区函数 partition by的用法

    partition  by关键字是分析性函数的一部分,它和聚合函数(如group by)不同的地方在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录, partition  by ...

  9. sqlserver中分区函数 partition by与 group by 区别 删除关键字段重复列

    partition  by关键字是分析性函数的一部分,它和聚合函数(如group by)不同的地方在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录, partition  by ...

随机推荐

  1. DataSet读取数据

    using System.Data; using System.Data.SqlClient; namespace ConsoleApplication3 { class Program { stat ...

  2. iOS支持Https

    http://oncenote.com/2014/10/21/Security-1-HTTPS/?hmsr=toutiao.io&utm_medium=toutiao.io&utm_s ...

  3. NetBios 的结构体详解

    [NetBios 的结构体详解] NetBIOS是早期的局域网传输协议. 1.结构体. 2.命令 NetBIOS命令的使用方式有两种,即等待和非等待(或称为同步与异步)方式. 如果命令码的高阶位是0时 ...

  4. C# lambda

    1. lambda example 1 // Create a basic delegate that squares a number MyDelegate foo = (x) => x * ...

  5. LDAP客户端

    LDAP客户端通过与服务端关联起来,就可以使用服务端的系统账号登录系统,通过useradd 添加用户是在ldap里是没有显示的,ldap添加用户,在/etc/passwd里也是没有显示的,ldap添加 ...

  6. 完整地mybatis + springmvc用checkbox实现批量删除

    因为自己在网上找了半天,都找不到完整地代码(脑袋笨,不会变通到自己项目里),所以在这里记下了近乎完整的代码 前端代码 <span style="cursor:pointer;" ...

  7. js 日期对象Date以及传参

    创建一个日期对象,日期对象可传参new Date() 创建日期对象getFullYear() 获取年份 getMonth() 获取月份 返回值是 0(一月) 到 11(十二月) 之间的一个整数 get ...

  8. 经典的找不到符号(symbol)错误 #iOS开发

    使用BmobSDK的过程中,编译时出现了以下错误信息,意思是 -[BmobSRWebSocket _innerPumpScanner] 这个方法引用了 "_utf8_nextCharSafe ...

  9. react 写的省市三级联动

    <!DOCTYPE html><html><head> <meta charset="utf-8"> <title>Ba ...

  10. C#实现自动单击

    最新玩了一下上学时候玩的游戏,但游戏里面变化太多了,进去后等级就很高,要不停地点击鼠标加技能. 所以利用工作中常用的C#调用 API不停地点击鼠标. 如图: 为方便在基础上修改,我把整个解决方案放到百 ...