1. 程式人生 > >SQL Server 2005中的分區表(五):添加一個分區

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

eat 查詢 sch 另一個 rom 原創 查看 copyto art

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

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

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

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

[c-sharp] view plain copy
  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、修改分區函數。

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

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

[c-sharp] view plain copy
  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到-->新查詢編輯器窗口,如下圖所示:

技術分享

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

[c-sharp] view plain copy
  1. ALTER PARTITION FUNCTION partfunSale()
  2. SPLIT RANGE (‘20100101‘)

其中:

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

2、partfunSale()為分區函數名

3、SPLIT RANGE 意思是分割界限

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

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

[c-sharp] view plain copy
  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

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