SQL Server 2005分區表——分區切換[轉]
本文演示了 SQL Server -- 創建分區函數 create partition function as range right for values ( '1997-01-01', '1998-01-01', '1999-01-01' ) go
-- 創建分區方案 create partition scheme PS_Orders as partition PF_Orders_OrderDateRange to ([primary], [primary], [primary], go
-- 創建分區表 create table dbo.Orders ( ,CustomerID ,EmployeeID ,OrderDate ) on PS_Orders(OrderDate) go
-- 創建聚集分區索引 create clustered index IXC_Orders_OrderDate go
-- 為分區表設置主鍵 alter table dbo.Orders add constraint primary key (OrderID, go
-- 導入數據到分區表 insert into dbo.Orders select OrderID, CustomerID, EmployeeID, from go
-- 查看分區表每個分區的資料分佈情況 select partition = from dbo.Orders group by order by partition go 一、切換分區表的一個分區到普通資料表中:Partition to 首先建立普通資料表 Orders_1998,該表用來存放訂單日期為 1998 年的所有資料。 create table dbo.Orders_1998 ( ,CustomerID ,EmployeeID ,OrderDate ) on [primary] go
create clustered index go
alter table dbo.Orders_1998 add primary key nonclustered go 開始切換分區表 Orders 第三個分區的資料(1998年的資料)到普通表 Orders_1998 alter table dbo.Orders switch partition 3 值得注意的是,如果你想順利地進行分區到普通表的切換,最好滿足以下的前提條件: 1. 普通表必須建立在分區表切換分區所在的檔組上。 2. 普通表的表結構跟分區表的一致; 3. 普通表上的索引要跟分區表一致。 4. 普通表必須是空表,不能有任何資料。 二、切換普通表資料到分區表的一個分區中:Table to 上面我們已經把分區表 Orders 第三個分區的資料切換到普通表 Orders_1998 中了,現在我們再切換回來: alter table dbo.Orders_1998 switch to 但是,此時有錯誤發生: Msg 4982, Level 16, State 1, Line 1 ALTER TABLE SWITCH statement failed. Check constraints of source table that are not allowed by range defined by 這就奇怪了,能把資料從分區切換進來卻切換不出去。出錯資訊中提示我們是普通表的 check alter table dbo.Orders_1998 add check 再次進行切換,成功! 看來,切換普通表資料到分區,除了滿足上面的 4 個條件外,還要加上一條:普通表必須加上和分區資料範圍一致的 check 約束條件。 三、切換分區表的分區到另一分區表:Partition to 首先建立分區表 OrdersArchive,這個表用來存放訂單歷史資料。 -- 創建分區函數 create partition function PF_OrdersArchive_OrderDateRange(datetime) as range right for values ( '1997-01-01', '1998-01-01', '1999-01-01' ) go
-- 創建分區方案 create partition scheme PS_OrdersArchive as partition PF_OrdersArchive_OrderDateRange to ([primary], [primary], [primary], go
-- 創建分區表 create table dbo.OrdersArchive ( ,CustomerID ,EmployeeID ,OrderDate ) on PS_OrdersArchive(OrderDate) go
-- 創建聚集分區索引 create clustered index go
-- 為分區表設置主鍵 alter table dbo.OrdersArchive add primary key (OrderID, go 然後,切換分區表 Orders 分區資料到 OrdersArchive alter table dbo.Orders switch partition alter table dbo.Orders alter table dbo.Orders 最後,查看分區表 OrdersArchive -- 查看分區表每個分區的資料分佈情況 select partition = from dbo.OrdersArchive group by $partition.PF_OrdersArchive_OrderDateRange(OrderDate) order by partition 實際上,分區表分區切換並沒有真正去移動資料,而是 SQL Server 在系統底層改變了表的中繼資料。因此分區表分區切換是高效、快速、靈活的。利用分區表的分區切換功能,我們可以快速載入資料到分區表。卸載分區資料到普通表,然後 truncate 普通表,以實現快速刪除分區表資料。快速歸檔不活躍資料到歷史表。 原文地址:http://www.sqlstudy.com/sql_article |
留言列表