SQL Server のことなら SQL Quality SQL Server パフォーマンス チューニング、コンサルティング、アドバイス、相談、定期診断、トレーニング

ホーム > 技術情報 > SQL Server 2012 自習書 データ パーティション入門

SQL Server 2012 自習書 「No.19 データ パーティション入門」(HTML 版)

松本美穂と松本崇博が執筆した完全オリジナル SQL Server 2012 自習書シリーズの「No.19 データ パーティション入門」の HTML 版です。 日本マイクロソフトさんの Web サイトで Word または PDF 形式でダウンロードできますが、今回、HTML 版として公開する許可をいただきましたので、ここに掲載いたします。[2013年12月29日]

目次へ | 前のページへ | 次のページへ

4.3 パーティションのスイッチ: SWITCH

◆ パーティションのスイッチ

次に、稼動テーブル「t1」のパーティション「1」(2009年用)を、アーカイブ テーブル「t1Arch」のパーティション「1」へ SWITCH してみましょう。
00028

1.パーティションをスイッチするには、ALTER TABLE .. SWITCH を利用して、次のように記述します。

USE pTestDB
go
ALTER TABLE t1
 SWITCH PARTITION TO t1arch PARTITION 1

これにより、稼動テーブルのパーティション1 のデータをすべて、アーカイブ テーブルのパーティション1 へ移動することができます(内部的には、ポインターの変更のみで完了するので、操作は一瞬で完了します)。

2.スイッチが完了したら、データが移動されたことを確認してみましょう。

SELECT FROM t1arch

00029

3.次に、$PARTITION 関数を利用して、パーティション番号を確認しておきましょう。

-- 稼動テーブルt1
SELECT *, $PARTITION.pFunc1(col1As [パーティション番号]
FROM t1
-- アーカイブテーブルt1Arch
SELECT *, $PARTITION.pFunc1Arch(col1As [パーティション番号]
FROM t1Arch

00030

◆ 新しいパーティションの追加とパーティション2 のスイッチ

次に、もう一度パーティションのスイッチを試すために、新しいパーティション(2014年)用のファイル グループとして「fg6」を追加して、その後、稼動テーブルのパーティション2 をアーカイブ テーブルのパーティション2 へスイッチしてみましょう。
00031

1.操作手順は、パーティション 1 をスイッチしたときと同じで、次のように実行します。

-- ファイル グループfg6追加
USE master
go
ALTER DATABASE pTestDB
 ADD FILEGROUP fg6
go
ALTER DATABASE pTestDB     
 ADD FILE (  NAME 'fg6'
           FILENAME 'C:\test\fg6.ndf', SIZE 5MB)
  TO FILEGROUP fg6
go
-- パーティション構成更新NEXT USED fg6
USE pTestDB
go
ALTER PARTITION SCHEME pScheme1
 NEXT USED fg6
go
ALTER PARTITION SCHEME pScheme1Arch
 NEXT USED fg6
go
-- パーティション関数範囲変更SPLIT RANGE
ALTER PARTITION FUNCTION pFunc1()
 SPLIT RANGE ('2014/01/01')
go
ALTER PARTITION FUNCTION pFunc1Arch()
 SPLIT RANGE ('2014/01/01')
go
-- データ追加2013 2014データ
INSERT INTO t1 VALUES ('2013/12/31')
INSERT INTO t1 VALUES ('2014/01/01')
-- どのパーティション格納されたかを確認
SELECT *, $PARTITION.pFunc1(col1As [パーティション番号]
FROM t1
/*------------------------------------------------------------
  パーティションSWITCH
-------------------------------------------------------------*/
ALTER TABLE t1
 SWITCH PARTITION TO t1arch PARTITION 2

-- アーカイブ テーブルデータ移動されたこと確認
SELECT FROM t1arch
-- 稼動テーブルどのパーティション内データ確認
SELECT *, $PARTITION.pFunc1(col1As [パーティション番号]
FROM t1
-- アーカイブ テーブルどのパーティション内データ確認
SELECT *, $PARTITION.pFunc1Arch(col1As [パーティション番号]
FROM t1Arch

00032

◆ SWITCH 済みのパーティションへ CHECK 制約の追加

ここまでの手順だけでは、稼動テーブルの SWITCH 済みのパーティションへも依然としてデータが追加できてしまうことに注意する必要があります。では、これを試してみましょう。

1.稼動テーブル「t1」の SWITCH 済みのパーティションである 1(2009年)と 2(2010年)に対して、データを追加してみましょう。

-- パーティション データ追加
INSERT INTO t1 VALUES ('2009/08/08')
-- パーティション データ追加
INSERT INTO t1 VALUES ('2010/08/08')
-- 追加されたデータ確認
SELECT FROM t1

00033

2009年と 2010年のデータが追加できてしまったことを確認できます。この状況を回避するには、稼動テーブル側へ CHECK 制約を追加するようにします。

2.CHECK 制約を追加するには、まず、追加したデータを DELETE しておきます。

DELETE FROM t1 WHERE col1 IN('2009/08/08''2010/08/08')

3.削除後、ALTER TABLE .. ADD CONSTRAINT を利用して、CHECK 制約を追加します。

ALTER TABLE t1
 ADD CONSTRAINT ck1 CHECK(col1 >= '2011/01/01')

これで、t1 テーブルへは、2011/1/1 以上のデータしか追加できないように設定できました。

4.これを確認するために、もう一度 2010年のデータを追加してみましょう。

INSERT INTO t1 VALUES ('2010/08/08')

00034

今度は、制約違反エラーが発生して、データを追加できなかったことを確認できます。このように、パーティションの SWITCH 後は、SWITCH 済みの範囲へ、データが追加されないように、CHECK 制約を設定しておくようにしましょう。

目次へ | 前のページへ | 次のページへ

SQL Server 2014 CTP2 インメモリ OLTP 機能の概要
SQL Server 2012 の教科書
SQL Server 2014 CTP2 インメモリ OLTP 機能の概要 (Amazon Kindle 書籍)
SQL Server 2012 の教科書(ソシム)

事例1

MPNロゴ


SQLQualityは執筆とセミナーを通じて技術の啓蒙やエンジニアの育成支援も行っています
最新刊
SQL Server 2014 CTP2 インメモリ OLTP 機能の概要
SQL Server 2014 CTP2 インメモリ OLTP 機能の概要(Amazon Kindle 書籍)

SQL Server 2012 の教科書
SQL Server 2012 の教科書(ソシム)

弊社オリジナル制作の
SQL Server 2012 自習書も
マイクロソフトのサイトで公開中!
ロングセラー
ASP.NET でいってみよう  SQL Server 2000 でいってみよう
ASP.NET でいってみよう
第7刷 16,500 部発行
SQL Server 2000 でいってみよう
第12刷 28,500 部発行


セミナー風景
セミナー風景

弊社執筆の
SQL Server 2012 自習書
マイクロソフトのサイトで公開中
全30冊
ダウンロードはこちら
弊社執筆の
SQL Server 2008 R2 自習書
マイクロソフトのサイトで公開中
全30冊
目次はこちら
松本美穂のコラム
(公開活動などのお知らせ)

第 46 回:Microsoft Power BI for Windows app からの Power BI サイト アクセス
第 45 回:Power Query で取得したデータを PowerPivot へ読み込む方法と PowerPivot for Excel 自習書のご紹介
第44回:「SQL Server 2014 への移行とアップグレードの実践」ドキュメントを作成しました
第43回:SQL Server 2014 インメモリ OLTP 機能の上級者向けドキュメントを作成しました
第42回:Power Query プレビュー版 と Power BI for Office 365 へのクエリ保存(共有クエリ)
第41回:「SQL Server 2014 CTP2 インメモリ OLTP 機能の概要」自習書のお知らせです
第40回: SQL Server 2012 自習書(HTML版)を掲載しました
第39回: Power BI for Office 365 プレビュー版は試されましたか?
第38回: SQL Server 2014 CTP2 の公開
第37回: SQL Server 2014 CTP1 の自習書をご覧ください
第36回: SQL Server 2014 CTP1 のクラスター化列ストア インデックスを試す
第35回: SQL Server 2014 CTP1 のインメモリ OLTP の基本操作を試す
第34回: GeoFlow for Excel 2013 のプレビュー版を試す
第33回: iPad と iPhone からの SQL Server 2012 Reporting Servicesのレポート閲覧
第32回: PASS Summit 2012 参加レポート
第31回: SQL Server 2012 Reporting Services 自習書のお知らせ
第30回: SQL Server 2012(RTM 版)の新機能 自習書をご覧ください
第29回: 書籍「SQL Server 2012の教科書 開発編」のお知らせ
第26回: SQL Server 2012 の Power View 機能のご紹介
第25回: SQL Server 2012 の Data Quality Services
第24回: SQL Server 2012 自習書のご案内と初セミナー報告
第23回: Denali CTP1 が公開されました
第22回 チューニングに王道あらず
第21回 Microsoft TechEd 2010 終了しました
第20回 Microsoft TechEd Japan 2010 今年も登壇します
第19回 SQL Server 2008 R2 RTM の 日本語版が公開されました
第18回 「SQL Azure 入門」自習書のご案内
第17回 SQL Server 2008 自習書の追加ドキュメントのお知らせ
第16回 SQL Server 2008 R2 自習書とプレビュー セミナーのお知らせ
第15回 SQL Server 2008 R2 Reporting Services と新刊のお知らせ
第14回 TechEd 2009 のご報告と SQL Server 2008 R2 について
第13回 SQL Server 2008 R2 の CTP 版が公開されました
第12回 MVP Summit 2009 in Seattle へ参加

技術コミュニティでも活動中

Microsoft MVP for SQL Server

松本崇博 Blog(SQL Server Tips)
松本美穂ブログ(SQL Serverノート)