SQL Server 2008中的分割槽表(五):新增一個分割槽
所謂天下大事,分久必合,合久必分,對於分割槽表而言也一樣。前面我們介紹過如何刪除(合併)分割槽表中的一個分割槽,下面我們介紹一下如何為分割槽表新增一個分割槽。
為分割槽表新增一個分割槽,這種情況是時常會 發生的。比如,最初在資料庫設計時,只預計了存放3年的資料,可是到了第4天怎麼辦?這樣的話,我們就可以為分割槽表新增一個分割槽,讓它把新的資料放在新的分割槽裡。再比如,最初設計時,一個分割槽用於存放一年的資料,結果在使用的時候才發現,一年的資料太多,想將一個分割槽中的資料分為兩個分割槽來存放。
遇到這種情況,就必須要為分割槽表新增一個分割槽了。
當然,我們也可以使用修改分割槽函式的方式來新增一個分割槽,但是在修改分割槽函式時,我們必須要注意另一個問題——分割槽方案。為什麼還要注意分割槽方案呢?我們回過頭來看一下前面是怎麼定義分割槽函式和分割槽方案的,如以下程式碼所示:
- --新增分割槽函式
- CREATE PARTITION FUNCTION partfunSale (datetime)
- AS RANGE RIGHT FOR VALUES ('20100101','20110101','20120101','20130101')
- --新增分割槽方案
- CREATE PARTITION SCHEME partschSale
- AS PARTITION partfunSale
- TO ( Sale2009, Sale2010, Sale2011, Sale2012, Sale2013)
從以上程式碼中可以看出,分割槽函式定義了用於分割槽的資料邊界,而分割槽函式指定了符合分割槽邊界的資料存放在檔案組。因此,分割槽方案中指定的檔案組個數應該是比分割槽函式中指定的邊界數大1的。如上例中,分割槽函式中指定的邊界數為4,那麼在分割槽方案中指定的檔案組數就為5。
如果,我們將分割槽函式中的邊界數增加一個,那麼分割槽方案中的檔案組數也就要相應地增加一個。因此,我們不能簡簡單單地通過修改分割槽函式的方式來為分割槽表新增一個分割槽。
那麼,我們應該怎麼做呢?是不是要先為分割槽方案新增一個檔案組?
這種想法是沒有錯的,想要為分割槽表新增一個分割槽,可以通過以下兩個步驟來實現:
1、為分割槽方案指定一個可以使用的檔案組。
2、修改分割槽函式。
在為分割槽方案指定一個可用的檔案組時,該分割槽方案並沒有立刻使用這個檔案組,只是將檔案組先備用著,等修改了分割槽函式之後分割槽方案才會使用這個檔案組(不要忘記了,如果分割槽函式沒有變,分割槽方案中的檔案組個數就不能變)。
為分割槽方案指定一個可用的檔案組的程式碼如下所示:
- ALTER PARTITION SCHEME partschSale
- NEXT USED [Sale2010]
其中:
1、ALTER PARTITION SCHEME意思是修改分割槽方案
2、partschSale是分割槽方案名
3、NEXT USED意思是下一個可使用的檔案組
4、[Sale2010]是檔案組名
為分割槽方案添加了下一個可使用的檔案組之後,分割槽方案並沒有立刻使用這個檔案組,此時我們可以通過檢視分割槽方案的原始碼來證實。檢視方法是:在SQL Server Management Studio中,選擇資料庫-->儲存-->分割槽方案,右擊分割槽方案名,在彈出的選單中選擇“編寫分割槽方案指令碼為”-->CREATE到-->新查詢編輯器視窗,如下圖所示:
為分割槽方案添加了下一個可使用的檔案組之後,我們就可以動手修改分割槽函數了,使用程式碼如下所示:
- ALTER PARTITION FUNCTION partfunSale()
- SPLIT RANGE ('20100101')
其中:
1、ALTER PARTITION FUNCTION意思是修改分割槽函式
2、partfunSale()為分割槽函式名
3、SPLIT RANGE 意思是分割界限
4、'20100101' 是用於分割的界限值
當然,我們在修改分割槽函式前後都可以統計一下各物理分割槽的資料記錄情況,如以下程式碼所示:
- --統計所有分割槽表中的記錄總數
- select $PARTITION.partfunSale(SaleTime) as 分割槽編號,count(id) as 記錄數 from Sale group by $PARTITION.partfunSale(SaleTime)
- --原來的分割槽函式是將2010-1-1之前的資料放在第1個分割槽表中,將2010-1-1至2011-1-1之間的資料放在第2個分割槽表中
- --現在需要將2011-1-1之前的資料都放在第1個分割槽表中,也就是將第1個分割槽表和第2個分割槽表中的資料合併
- --修改分割槽函式
- ALTER PARTITION FUNCTION partfunSale()
- SPLIT RANGE ('20100101')
- --統計所有分割槽表中的記錄總數
- select $PARTITION.partfunSale(SaleTime) as 分割槽編號,count(id) as 記錄數 from Sale group by $PARTITION.partfunSale(SaleTime)
以上程式碼的執行結果如下圖所示:
從上圖中可以看出,分割槽表中已經添加了一個分割槽,我們也可以再一次檢視分割槽方案的原始碼,如下圖所示,這個時候分割槽方案也自動添加了一個檔案組。