--增加文件组
alter database Test add filegroup [FG1]
go
alter database Test add filegroup [FG2]
GO
alter database Test add filegroup [FG3] --增加文件
ALTER DATABASE [Test] ADD FILE ( NAME = N'TestFG1', FILENAME = N'D:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\TestFG1.ndf' , SIZE = 3072KB , FILEGROWTH = 1024KB ) TO FILEGROUP [FG1]
GO
ALTER DATABASE [Test] ADD FILE ( NAME = N'TestFG2', FILENAME = N'D:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\TestFG2.ndf' , SIZE = 3072KB , FILEGROWTH = 1024KB ) TO FILEGROUP [FG2]
GO
ALTER DATABASE [Test] ADD FILE ( NAME = N'TestFG3', FILENAME = N'D:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\TestFG3.ndf' , SIZE = 3072KB , FILEGROWTH = 1024KB ) TO FILEGROUP [FG3]
GO --创建分区函数
CREATE PARTITION FUNCTION OrderDateRangePFN(datetime)
AS
RANGE LEFT FOR VALUES ('2012-12-31 23:59:59.997',
'2013-12-31 23:59:59.997',
'2014-12-31 23:59:59.997') --创建分区架构
--创建分区函数后,必须将其与分区架构相关联,以便将分区定向至特定的文件组。
--定义分区架构时,即使多个分区位于同一个文件组中,也必须为每个分区指定一个文件组。
--对于前面创建的范围分区 (OrderDateRangePFN),存在五个分区;最后一个空分区将在 PRIMARY 文件组中创建。
--因为此分区永远不包含数据,所以不需要指定特殊的位置。
CREATE PARTITION SCHEME OrderDatePScheme
AS
PARTITION OrderDateRangePFN
TO ([FG1], [FG2], [FG3], [PRIMARY]) --注意:如果所有分区都位于同一个文件组中,则可以使用以下更简单的语法:
/*CREATE PARTITION SCHEME OrderDatePScheme
AS
PARTITION OrderDateRangePFN
ALL TO ([PRIMARY])*/ --定义分区函数(逻辑结构)和分区架构(物理结构)后,即可创建表来利用它们。表定义应使用的架构,而架构又定义函数。要将这三者结合起来,必须指定应该应用分区函数的列。范围分区始终只映射到表中的一列,此列应与分区函数中定义的边界条件的数据类型相匹配。另外,如果表应明确限制数据集(而不是从负无穷大到正无穷大),则还应添加 CHECK 约束。 create table Orders(ID INT IDENTITY(1,1),DT DATETIME NOT NULL,OrderNo nvarchar(20))
ON OrderDatePScheme(DT) --ALTER TABLE Orders
--add CONSTRAINT OrdersPK
--PRIMARY KEY (ID) insert into Orders(DT,OrderNo)
select '2012-01-01','' union all
select '2013-01-01','' union all
select '2015-01-01','' --查询
SELECT *
FROM dbo.Orders AS o
WHERE $partition.OrderDateRangePFN(o.DT) IN (4) --1,2,3,4 代表分段 --增加分区
--1)先增加文件组及数据次要文件
--2)更改数据架构
ALTER PARTITION SCHEME OrderDatePScheme
NEXT USED [FG4]
GO
--更改分区函数,为 2014 年 12 月添加新的边界点。(拆分)
ALTER PARTITION FUNCTION TwoYearDateRangePFN()
SPLIT RANGE ('2014-12-31 23:59:59.997')
GO --移动数据到备份表
--创建分区段表
create table Orders2012(ID INT IDENTITY(1,1),DT DATETIME NOT NULL,OrderNo nvarchar(20))
ON FG1 ALTER TABLE Orders
SWITCH PARTITION 1
TO Orders2012
GO --更改分区函数以删除 2012 年 月的边界点(合并)
ALTER PARTITION FUNCTION OrderDateRangePFN()
MERGE RANGE ('2012-12-31 23:59:59.997')
GO
05-06 13:49