iT邦幫忙

DAY 27
7

SQL SERVER 2008效能監控與最佳化系列 第 27

Day27_Partition03:PartitionTable搭配Switch轉移資料

Partition Table搭配Switch可將資料從原本的Table轉移到另一個Table,這是一個很實用而且常用到的範例,熟悉如何使用Partition Table轉移資料後,之後對於使用Partition Table新增資料或刪除資料可以更得心應手,如果要做好DBA的工作熟悉Partition Table的轉換資料機制是不可或缺的技巧。
在上一篇Day26_Partition02建立Partition Table介紹如何建立Partition Table後,這篇要介紹Partition Table搭配Switch轉移資料。

1.觀看原本的資料

--1.觀看原本的資料
Use Performance
GO
SELECT * FROM ArchivedTable
GO

執行結果:

2.建立要放置轉出資料的Table

--2.建立要放置轉出資料的Table
IF OBJECT_ID('TruncateTable') IS NOT NULL
BEGIN
   DROP TABLE TruncateTable
END

CREATE TABLE TruncateTable
(ChineseYM INT PRIMARY KEY,
tName varchar(50))
ON [PRIMARY];
GO

3.將資料從ArchivedTable轉移到TruncateTable

--3.將資料從ArchivedTable轉移到TruncateTable
ALTER TABLE ArchivedTable  SWITCH PARTITION 3 TO TruncateTable ; 
GO 

4.1檢查Partition的內容

--4.1檢查Partition的內容
SELECT $PARTITION.ChineseYearPartitions(ChineseYM) AS [Partition Number], COUNT(*) AS total
FROM ArchivedTable
GROUP BY $PARTITION.ChineseYearPartitions(ChineseYM)
ORDER BY $PARTITION.ChineseYearPartitions(ChineseYM)
COMPUTE SUM (COUNT(*))

執行結果:

4.2檢查TABLE內容

--4.2檢查TABLE內容
SELECT * FROM ArchivedTable
SELECT * FROM TruncateTable

執行結果:

5.將資料從TruncateTable轉入ArchivedTable,因為沒有CONSTRAINT,再轉換資料時ArchivedTable不知道正確的資料範圍

--5.將資料從TruncateTable轉入ArchivedTable,因為沒有CONSTRAINT,再轉換資料時ArchivedTable不知道正確的資料範圍
ALTER TABLE TruncateTable   SWITCH TO ArchivedTable PARTITION 3  ; 
GO 
/*
訊息4982,層級16,狀態1,行1
ALTER TABLE SWITCH 陳述式失敗。來源資料表'Performance.dbo.TruncateTable' 的檢查條件約束所允許的值,
於目標資料表'Performance.dbo.ArchivedTable' 資料分割'3' 上定義的範圍並不允許。
*/

6.增加CONSTRAINT,在轉換時ArchivedTable才會知道正確的資料範圍

--6.增加CONSTRAINT,在轉換時ArchivedTable才會知道正確的資料範圍
ALTER TABLE [dbo].[TruncateTable]  WITH CHECK ADD  CONSTRAINT [CK_TruncateTable] CHECK  (([ChineseYM]>=(10001)))
GO

ALTER TABLE [dbo].[TruncateTable] CHECK CONSTRAINT [CK_TruncateTable]
GO

7.再一次將資料從TruncateTable轉入ArchivedTable

--7.再一次將資料從TruncateTable轉入ArchivedTable
ALTER TABLE TruncateTable   SWITCH TO ArchivedTable PARTITION 3  ; 
GO 

8.1檢查Partition的內容

--8.1檢查Partition的內容
SELECT $PARTITION.ChineseYearPartitions(ChineseYM) AS [Partition Number], COUNT(*) AS total
FROM ArchivedTable
GROUP BY $PARTITION.ChineseYearPartitions(ChineseYM)
ORDER BY $PARTITION.ChineseYearPartitions(ChineseYM)
COMPUTE SUM (COUNT(*))

執行結果:

8.2檢查TABLE內容

--8.2檢查TABLE內容
SELECT * FROM ArchivedTable
SELECT * FROM TruncateTable
GO

執行結果


上一篇
Day26_Partition02建立Partition Table
下一篇
Day28_Partition04PartitionTable搭配Switch刪除資料
系列文
SQL SERVER 2008效能監控與最佳化30

尚未有邦友留言

立即登入留言