分區函數和分區方案的建立和使用方法
具體設計過程如下:
(1)首先建立一個名為partionTest的資料庫。然後分别為資料庫partionTest添加四個檔案組,檔案組名依次為FileGroup001~FileGroup004,
然後為該資料庫添加四個資料檔案,分别命名為File001~File004,并将它們依次儲存到檔案組FileGroup001~FileGroup004中。
(2)以資料庫partionTest為例,右擊資料庫partionTest,從其快捷菜單中選擇【屬性】指令,打開【資料庫屬性】對話框。選擇該對話框中的
【選擇頁】清單中的【檔案】選項,然後單擊選項頁的【添加】按鈕,為該資料庫添加一個檔案,将檔案的邏輯名命名為File001,然後單擊【檔案組】
列中的下拉清單,打卡【partionTest的建立檔案組】對話框,在【名稱】文本框中輸入需要命名的檔案組名稱,本示例使用FileGroup001,
如下圖所示:

(3)按照上面介紹的方法建立剩餘的3個檔案及檔案組,最終效果如下圖所示:
注意:預設情況下SQLSERVER2005将使用于邏輯名稱相同的名稱作為資料庫的實體主檔案名。是以,如果使用一個統一的檔案夾來儲存資料庫檔案,
就需要注意為不同資料庫的資料檔案設定不同的邏輯名稱。
(4)做好上述準備工作後,接下來就可以開始建立分區方案和分區函數了。首先建立一個分區函數,所謂分區函數,就是一種用于規定如何将資料劃分到不同分區的
規則函數。在【查詢編輯器】視窗中輸入下面T-SQL腳本:
1 USE partionTest
2 GO
3 CREATE PARTITION FUNCTION PartionByInt(int)
4 AS RANGE LEFT FOR VALUES(100,200,300)
5 GO
上述T-SQL腳本設定相應的分區劃分規則,其中設定了3個數值類型的分區點,分别為100、200、300,并通過關鍵詞LEFT指明了由3個分區點劃分的4段分區,
即(-∞,100)、[101,200]、[201,300]和[301,∞],如果使用關鍵詞RIGHT,分區将變化為[100,199]、[200,299]、[300,399]和[400,499]。單擊【執行】
按鈕,建立名為PartionByInt的分區函數。
(5)切換到【對象資料總管】中,展開資料庫partionTest\【存儲】\【分區函數】節點,可以看到剛剛建立的分區函數PartionByInt,如下圖所示:
(6)繼續在【查詢編輯器】視窗中輸入下面的T-SQL腳本:
1 USE partionTest
2
3 GO
4
5 CREATE PARTITION SCHEME PartionByIntScheme
6
7 AS PARTITION PartionByInt
8
9 TO(FileGroup001,FileGroup002,FileGroup003,FileGroup004);
上述T-SQL腳本将建立一個名為PartionByIntScheme的分區方案。建立該方案時,通過AS PARTITION指定了用于建立分區方案的分區函數(即前面建立的分區函數PartionByInt)。
同時,通過關鍵詞TO将建立的分區與檔案組FileGroup001~FileGroup004相綁定。單擊【執行】按鈕,建立該分區方案。
(7)切換到【對象資料總管】下,展開資料庫partionTest\【存儲】\【分區方案】節點,可以看到剛剛建立的分區方案PartionByIntScheme,如下圖所示:
(8)接下來為了示範分區方案的使用方法,在此需要首先建立一個資料表,本示例建立一個名為testPartionTable的資料表。在【查詢編輯器】視窗中輸入下面的
T-SQL腳本:
1 USE partionTest
2 GO
3 CREATE TABLE testPartionTable
4 (ID INT NOT NULL,
5 ItemNo CHAR(20),
6 ItemName CHAR(40)
7 )ON PartionByIntScheme(ID);
(9)單擊【執行】按鈕,建立名為testPartionTable的資料表。需要注意的是,在這裡建立資料表時,使用了關鍵詞ON來指定需要使用的分區方案,并将字段ID指定為
分區的依據字段,即根據ID值将資料分别儲存于不同的檔案(即分區)中。下面使用上面建立的分區方案,向資料表testPartionTable插入資料。在【查詢編輯器】
視窗中輸入下面的T-SQL腳本:
1 USE partionTest
2 GO
3
4 declare @count int
5 set @count=-25
6 while @count<=100
7 begin
8 insert into testPartionTable select
9 @count,'ITEM'+convert(varchar(6),@count),'>0 and <100'
10 set @count=@count+1
11 end
12
13 set @count=101
14 while @count<=200
15 begin
16 insert into testPartionTable select
17 @count,'ITEM'+convert(varchar(6),@count),'>100 and <200'
18 set @count=@count+1
19 end
20
21 set @count=201
22 while @count<=300
23 begin
24 insert into testPartionTable select
25 @count,'ITEM'+convert(varchar(6),@count),'>200 and <300'
26 set @count=@count+1
27 end
28
29 set @count=301
30 while @count<=400
31 begin
32 insert into testPartionTable select
33 @count,'ITEM'+convert(varchar(6),@count),'>300 and <400'
34 set @count=@count+1
35 end
36 set @count=401
37 while @count<=500
38 begin
39 insert into testPartionTable select
40 @count,'ITEM'+convert(varchar(6),@count),'>400 and <500'
41 set @count=@count+1
42 end
43
44 select * from testPartionTable
45 GO
(10)上述T-SQL腳本用于向資料表testPartionTable中輸入5組資料,這些資料将被自動地插入到4個不同的檔案(即4個不同的分區)File001~File004中。單擊【執行】按鈕,
運作上述T-SQL腳本,結果如下圖:
(11)如果想要查詢指定分區中包含的資料(例如檢視第3分區中所包含的記錄),可以使用如下T-SQL腳本:
1 USE partionTest
2 GO
3
4 select * from testPartionTable
5 where $PARTITION.PartionByInt(ID)=3
6 GO
(12)其中系統函數$PARTITION,用于為指定的分區函數傳回分區号,例如$PARTITION.PartionByInt(ID)用于傳回給ID所處的分區号。單擊【執行】按鈕
所得查詢結果如下圖所示:
建立一個空的分區
alter partition scheme PartionByInt next used File005
alter partition function PartionByInt ()
split range(400)
将資料轉移到建立的分區
--switch data
alter table temptable
switch to testPartionTable Partition $partition.PartionByInt(400)
删除分區
--先轉移資料
alter table testPartionTable switch Partition $partition.PartionByInt(400) to temptable
--合并分區
alter partition function PartionByInt()
merge range(400)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/21634320/viewspace-751652/,如需轉載,請注明出處,否則将追究法律責任。
轉載于:http://blog.itpub.net/21634320/viewspace-751652/