首页 > 代码库 > SQL2005 表分区亲测

SQL2005 表分区亲测

--增加文件组
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 = NTestFG1, FILENAME = ND:\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 = NTestFG2, FILENAME = ND:\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 = NTestFG3, FILENAME = ND:\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,123 union all 
select 2013-01-01,212 union all 
select 2015-01-01,120 

--查询
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