导航

MSSQL2005 建立分区

Posted on 2009-09-01 17:28  Niko  阅读(232)  评论(0)    收藏  举报

--1.创建数据库

USE[master]

IF EXISTS(SELECT * FROM [master].[dbo].sysdatabases where name = N'TEST')

DROP DATABASE [TEST]

CREATE DATABASE [TEST]

--2. 创建分组文件(由于表分区使用使用新的体系结构,使用文件组来进行表分区)
ALTER DATABASE [TEST] ADD FILEGROUP YEARFG1;
ALTER DATABASE [TEST] ADD FILEGROUP YEARFG2;
ALTER DATABASE [TEST] ADD FILEGROUP YEARFG3;
ALTER DATABASE [TEST] ADD FILEGROUP YEARFG4;
ALTER DATABASE [TEST] ADD FILEGROUP YEARFG5;

--3. 创建分组文件的物理存储文件
ALTER DATABASE [TEST] ADD FILE(NAME='YEARF1', FILENAME='D:\SoftWare\Microsoft SQL Server\MSSQL.1\MSSQL\Partition\TASK1.NDF') TO FILEGROUP YEARFG1;
ALTER DATABASE [TEST] ADD FILE(NAME='YEARF2', FILENAME='D:\SoftWare\Microsoft SQL Server\MSSQL.1\MSSQL\Partition\TASK2.NDF') TO FILEGROUP YEARFG2;
ALTER DATABASE [TEST] ADD FILE(NAME='YEARF3', FILENAME='D:\SoftWare\Microsoft SQL Server\MSSQL.1\MSSQL\Partition\TASK3.NDF') TO FILEGROUP YEARFG3;
ALTER DATABASE [TEST] ADD FILE(NAME='YEARF4', FILENAME='D:\SoftWare\Microsoft SQL Server\MSSQL.1\MSSQL\Partition\TASK4.NDF') TO FILEGROUP YEARFG4;
ALTER DATABASE [TEST] ADD FILE(NAME='YEARF5', FILENAME='D:\SoftWare\Microsoft SQL Server\MSSQL.1\MSSQL\Partition\TASK5.NDF') TO FILEGROUP YEARFG5;

--4.创建分区函数
USE [TEST]
GO

CREATE PARTITION FUNCTION YEARPF
AS
RANGE LEFT FOR VARUES('01/01/2009',
      '/01/01/2010',
      '01/01/2011',
      '/01/01/2012',
      '/01/01/2013')
--5. 创建分区架构
 
CREATE PARTITION SCHEME YEARPS
AS PARTITION YEARPF TO (YEARFG1, YEARFG2, YEARFG3,YEARFG4, YEARFG5)

--5. 创建表
CREATE TABLE T_JOB
{ID INT NOT NULL IDENTITY(1,1),
ADDEDTIME DATETIME NOT NULL
) ON YEARPS(ADDEDTIME)

 

 

-- 现在我们可以看一下我们刚才插入的行都分布在哪个Partition

SELECT *, $PARTITION.YEARPF(DUEDATE) FROM PARTITIONEDORDERS


 

--我们可以看一下我们现在PARTITIONEDORDERS表的数据存储在哪此partition中,以及在这些分区中数据量的分布

SELECT * FROM SYS.PARTITIONS WHERE OBJECT_ID = OBJECT_ID('PARTITIONEDORDERS')

 

--

--现在我们设想一下,如果我们随着时间的流逝,现在已经到了2005年,按照我们先前的设定,我们想再想入一个分区,这时是不是重新创建表分区架构然后重新把数据导放到新的分区架构呢,答案是完全不用。下面我们就看如果新加一个分区。

--更改分区架构定义语言,让下一个分区使用和现在已经存在的分区YEARFG6分区中,这样此分区就存储了两段partition的数据。

ALTER PARTITION SCHEME YEARPS

NEXT USED YEARFG6;

 

--更改分区函数

ALTER PARTITION FUNCTION YEARPF()

SPLIT RANGE ('01/01/2005') 

 

--现在我们可以看一下我们刚才插入的行都分布在哪个Partition?

SELECT *, $PARTITION.YEARPF(DUEDATE) FROM PARTITIONEDORDERS


 

--我们可以看一下我们现在PARTITIONEDORDERS表的数据存储在哪此partition中,以及在这些分区中数据量的分布

SELECT * FROM SYS.PARTITIONS WHERE OBJECT_ID = OBJECT_ID('PARTITIONEDORDERS')

 


 1.为数据库新建多个文件组,可分布于不同大磁盘上

ALTER DATABASE [D]
ADD FILEGROUP [GF1]
2.一个文件组可放置多个文件,下面,只为一个文件组分配一个文件

ALTER DATABASE [D] ADD FILE ( NAME = N'GF1', FILENAME = N'E:\D\D1\DGF1.ndf' , SIZE = 5MB , FILEGROWTH = 10% )
 TO FILEGROUP [GF1]
3.创建分区函数

CREATE PARTITION FUNCTION [D_PARTITIONFUNC] (int)
        AS RANGE LEFT FOR VALUES (200000,400000,500000)
4.将分区函数绑定到分区架构上

CREATE PARTITION SCHEME [D_PARTITION_SHEME]
AS PARTITION [D_PARTITIONFUNC]
TO ([PRIMARY],[GF1],[PRIMARY],[GF1])
注意primary表示主文件组,既是数据库建立大时候默认的

5.删除主键

ALTER TABLE dbo.B DROP CONSTRAINT [PK_B]
上一步可以不做,不过我个人推荐,因为分区键(分区函数的参数)必须建立在主键上

6.开始对表分区

ALTER TABLE  dbo.B add CONSTRAINT [PK_B] PRIMARY KEY CLUSTERED (ID)
ON [D_PARTITION_SHEME](ID)

 详细介绍请参考:http://www.diybl.com/course/7_databases/sql/msxl/2008410/109878.html