SQL Server 2005中的分區表(五):添加一個分區

 所謂天下大事,分久必合,合久必分,對於分區表而言也一樣。前面我們介紹過如何刪除(合併)分區表中的一個分區,下面我們介紹一下如何爲分區表添加一個分區。

 

    爲分區表添加一個分區,這種情況是時常會 發生的。比如,最初在數據庫設計時,只預計了存放3年的數據,可是到了第4天怎麼辦?這樣的話,我們就可以爲分區表添加一個分區,讓它把新的數據放在新的分區裏。再比如,最初設計時,一個分區用於存放一年的數據,結果在使用的時候才發現,一年的數據太多,想將一個分區中的數據分爲兩個分區來存放。

    遇到這種情況,就必須要爲分區表添加一個分區了。

 

    當然,我們也可以使用修改分區函數的方式來添加一個分區,但是在修改分區函數時,我們必須要注意另一個問題——分區方案。爲什麼還要注意分區方案呢?我們回過頭來看一下前面是怎麼定義分區函數和分區方案的,如以下代碼所示:

  1. --添加分區函數  
  2. CREATE PARTITION FUNCTION partfunSale (datetime)    
  3. AS RANGE RIGHT FOR VALUES ('20100101','20110101','20120101','20130101')    
  4. --添加分區方案  
  5. CREATE PARTITION SCHEME partschSale    
  6. AS PARTITION partfunSale    
  7. TO (  Sale2009,  Sale2010,  Sale2011,  Sale2012,  Sale2013)    
 

    從以上代碼中可以看出,分區函數定義了用於分區的數據邊界,而分區函數指定了符合分區邊界的數據存放在文件組。因此,分區方案中指定的文件組個數應該是比分區函數中指定的邊界數大1的。如上例中,分區函數中指定的邊界數爲4,那麼在分區方案中指定的文件組數就爲5。

    如果,我們將分區函數中的邊界數增加一個,那麼分區方案中的文件組數也就要相應地增加一個。因此,我們不能簡簡單單地通過修改分區函數的方式來爲分區表添加一個分區。

 

    那麼,我們應該怎麼做呢?是不是要先爲分區方案添加一個文件組?

    這種想法是沒有錯的,想要爲分區表添加一個分區,可以通過以下兩個步驟來實現:

    1、爲分區方案指定一個可以使用的文件組。

    2、修改分區函數。

 

    在爲分區方案指定一個可用的文件組時,該分區方案並沒有立刻使用這個文件組,只是將文件組先備用着,等修改了分區函數之後分區方案纔會使用這個文件組(不要忘記了,如果分區函數沒有變,分區方案中的文件組個數就不能變)。

    爲分區方案指定一個可用的文件組的代碼如下所示:

  1. ALTER PARTITION SCHEME partschSale  
  2.  NEXT USED [Sale2010]  
 

    其中:

    1、ALTER PARTITION SCHEME意思是修改分區方案

    2、partschSale是分區方案名

    3、NEXT USED意思是下一個可使用的文件組

    4、[Sale2010]是文件組名

 

    爲分區方案添加了下一個可使用的文件組之後,分區方案並沒有立刻使用這個文件組,此時我們可以通過查看分區方案的源代碼來證實。查看方法是:在SQL Server Management Studio中,選擇數據庫-->存儲-->分區方案,右擊分區方案名,在彈出的菜單中選擇“編寫分區方案腳本爲”-->CREATE到-->新查詢編輯器窗口,如下圖所示:

 

    爲分區方案添加了下一個可使用的文件組之後,我們就可以動手修改分區函數了,使用代碼如下所示:

  1. ALTER PARTITION FUNCTION partfunSale()  
  2.     SPLIT RANGE ('20100101')  

    其中:

    1、ALTER PARTITION FUNCTION意思是修改分區函數

    2、partfunSale()爲分區函數名

    3、SPLIT RANGE 意思是分割界限

    4、'20100101' 是用於分割的界限值

 

    當然,我們在修改分區函數前後都可以統計一下各物理分區的數據記錄情況,如以下代碼所示:

  1. --統計所有分區表中的記錄總數      
  2. select $PARTITION.partfunSale(SaleTime) as 分區編號,count(id) as 記錄數 from Sale group by $PARTITION.partfunSale(SaleTime)  
  3. --原來的分區函數是將2010-1-1之前的數據放在第1個分區表中,將2010-1-1至2011-1-1之間的數據放在第2個分區表中  
  4. --現在需要將2011-1-1之前的數據都放在第1個分區表中,也就是將第1個分區表和第2個分區表中的數據合併  
  5. --修改分區函數  
  6. ALTER PARTITION FUNCTION partfunSale()  
  7.     SPLIT RANGE ('20100101')  
  8. --統計所有分區表中的記錄總數      
  9. select $PARTITION.partfunSale(SaleTime) as 分區編號,count(id) as 記錄數 from Sale group by $PARTITION.partfunSale(SaleTime)  
 

    以上代碼的運行結果如下圖所示:

    從上圖中可以看出,分區表中已經添加了一個分區,我們也可以再一次查看分區方案的源代碼,如下圖所示,這個時候分區方案也自動添加了一個文件組。

 

 

原創不容易,轉載請註明出處。http://blog.csdn.net/smallfools/archive/2009/12/04/4940185.aspx

發佈了14 篇原創文章 · 獲贊 4 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章