標籤:blog http io ar os 使用 sp for strong
SQL Server 2005中的分區表(四):刪除(合并)一個分區分類: SQL Server2009-12-04 09:10 8735人閱讀 評論(0) 收藏 舉報sql server2010functionmerge儲存資料庫
在前面我們介紹過如何建立和使用一個分區表,並舉了一個例子,將不 同年份的資料放在不同的物理分區表裡。具體的分區方式為:
第1個小表:2010-1-1以前的資料(不包含2010-1-1)。
第2個小表:2010-1-1(包含2010-1-1)到2010-12-31之間的資料。
第3個小表:2011-1-1(包含2011-1-1)到2011-12-31之間的資料。
第4個小表:2012-1-1(包含2012-1-1)到2012-12-31之間的資料。
第5個小表:2013-1-1(包含2013-1-1)之後的資料。
分區函數的代碼如下所示:
[c-sharp] view plaincopy
- CREATE PARTITION FUNCTION partfunSale (datetime) AS RANGE RIGHT FOR VALUES (‘20100101‘,‘20110101‘,‘20120101‘,‘20130101‘)
假設我們在建立分區表之後發現,2010年以前的資料並不多,完全可以將它們與2010年的資料進行合并,放在同一個分區裡,也就是說,具體的分區方式改為:
第1個小表:2011-1-1以前的資料(不包含2011-1-1)。
第2個小表:2011-1-1(包含2011-1-1)到2011-12-31之間的資料。
第3個小表:2012-1-1(包含2012-1-1)到2012-12-31之間的資料。
第4個小表:2013-1-1(包含2013-1-1)之後的資料。
由於上面的需求更改了資料分區的條件,因此,我們必須要修改分區函數,因為分區函數的作用就是要來告訴SQL Server怎麼存放資料的。只要分區函數修改了,SQL Server會自動將資料重新分配,按照新的分區函數指定的方式來儲存資料。
先假設我們還沒有建立過分區表,要滿足上面的條件,我們必須要寫出如下代碼的建立分區函數的SQL語句
[c-sharp] view plaincopy
- CREATE PARTITION FUNCTION partfunSale (datetime)
- AS RANGE RIGHT FOR VALUES (‘20110101‘,‘20120101‘,‘20130101‘)
比較一個新的分區函數和老的分區函數,看看他們有什麼區別?
的確,我們很容易就可以發現,老的分區函數裡多了一個分界值——也就是‘20100101‘。那麼,修改老的分區函數,事實上就是將這分界值刪除。簡單一點說,刪除(合并)一個分區,事實上就是在分區函數中將多餘的分界值刪除。
刪除分區函數中的分界值,也就是修改分區函數的方法如下所示:
[c-sharp] view plaincopy
- ALTER PARTITION FUNCTION partfunSale()
- MERGE RANGE (‘20100101‘)
其中:
1、ALTER PARTITION FUNCTION 意思是修改分區函數
2、partfunSale()為分區函數名
3、MERGE RANGE意思是合并界限。事實上,合并界限和刪除分界值是一個意思。
我們可以在修改分區函數時先統計一下各物理分區中的記錄總數,在修改分區之後,再統計一下各物理分區中的記錄總數,看一下修改分區函數後的資料變化情況,代碼如下所示:
[c-sharp] view plaincopy
- --統計所有分區表中的記錄總數
- 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()
- MERGE RANGE (‘20100101‘)
- --統計所有分區表中的記錄總數
- select $PARTITION.partfunSale(SaleTime) as 分區編號,count(id) as 記錄數 from Sale group by $PARTITION.partfunSale(SaleTime)
運行結果如所示:
現在還有一個問題,就是通過修改分區函數合并資料之後,資料都存放在哪裡了?在修改之前,資料分別存放在檔案組Sale2009和Sale2010中,修改之後,資料放到哪裡去了呢?
事實上,在修改分區函數之後,SQL Server也會自動修改資料分割配置,將處於兩個物理分區中的資料放在同一個物理分區裡了。可以通過查看資料分割配置的方式來查看資料具體的存放位置。
查看資料分割配置的方式為:在SQL Server Management Studio中,選擇資料庫-->儲存-->資料分割配置,右擊資料分割配置名,在彈出的菜單中選擇“編寫資料分割配置指令碼為”-->CREATE到-->新查詢編輯器視窗
然後在新查詢編輯器視窗可以看到代碼。
從中可以看出,資料分割配置將原來Sale2010檔案組中的資料合併到了Sale2009檔案組中。
原創不容易,轉載請註明出處。http://blog.csdn.net/smallfools/archive/2009/12/04/4937878.aspx
SQL Server 2005中的分區表(四):刪除(合并)一個分區