SQL Server テーブルパーティション削除の詳細
2022-01-05 04:52:23
I. はじめに
パーティションの削除は、パーティションのマージとも呼ばれ、簡単に言えば複数のパーティションのデータをマージすることです。ここでは、テーブル
Sales.SalesOrderHeader
を例にして、テーブル・パーティションの削除を実行する方法を説明します。
大事なことは3回言うこと。 データベースをバックアップしてください データベースをバックアップせよ! データベースをバックアップしてください
II. デモ
2.1. データクエリ
2.1.1, パーティションメタデータを見る
SELECT * FROM SYS.PARTITION_FUNCTIONS --partitioning functions
SELECT * FROM SYS.PARTITION_RANGE_VALUES -- partitioning scheme
2.1.2. 各パーティションのデータ量をカウントする
SELECT $PARTITION.SalesOrderHeader_OrderDate(OrderDate) AS NUMBER,COUNT(1) AS COUNT
FROM [Sales]. [SalesOrderHeader].
GROUP BY $PARTITION.SalesOrderHeader_OrderDate(OrderDate)
パーティション・スキームとパーティション・ファンクションは、パーティション・テーブルにデータがある状態では削除できません。データを別のテーブルに移動してから削除してください。
2.2. ハンズオンの削除
2.2.1、元のテーブルパーティションをマージする
ALTER PARTITION FUNCTION SalesOrderHeader_OrderDate() MERGE RANGE('2011-01-01 00:00:00.000')
ALTER PARTITION FUNCTION SalesOrderHeader_OrderDate() MERGE RANGE('2012-01-01 00:00:00.000')
ALTER PARTITION FUNCTION SalesOrderHeader_OrderDate() MERGE RANGE('2013-01-01 00:00:00.000')
ALTER PARTITION FUNCTION SalesOrderHeader_OrderDate() MERGE RANGE('2014-01-01 00:00:00.000')
2.2.2, 元テーブルの全インデックスの作成スクリプトをバックアップする。
ALTER TABLE [Sales]. [SalesOrderHeader] ADD CONSTRAINT [PK_SalesOrderHeader_SalesOrderID] PRIMARY KEY NONCLUSTERED
(
[SalesOrderID] ASC
) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_ LOCKS = ON) ON [PRIMARY]
2.2.3. 元のテーブルからすべてのインデックスを削除する
ALTER TABLE [Sales]. [SalesOrderHeader] DROP CONSTRAINT [PK_SalesOrderHeader_SalesOrderID]
2.2.4. テンポラリテーブルの作成
CREATE TABLE [Sales]. [SalesOrderHeader_Temp](
[SalesOrderID] [INT] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
[RevisionNumber] [TINYINT] NOT NULL,
[OrderDate] [DATETIME] NOT NULL,
[OrderDate] [DATETIME] NOT NULL, [DueDate] [DATETIME] NOT NULL,
[ShipDate] [DATETIME] NULL,
[Status] [TINYINT] NOT NULL,
[OnlineOrderFlag] [dbo]. [Flag] NOT NULL,
[SalesOrderNumber] AS (ISNULL(N'SO'+CONVERT([NVARCHAR](23),[SalesOrderID]),N'*** ERROR ***')),
[PurchaseOrderNumber] [dbo]. [OrderNumber] NULL,
[AccountNumber] [dbo]. [AccountNumber] NULL,
[CustomerID] [INT] NOT NULL,
[SalesPersonID] [INT] NULL,
[TerritoryID] [INT] NULL,
[BillToAddressID] [INT] NOT NULL,
[ShipToAddressID] [INT] NOT NULL,
[ShipMethodID] [INT] NOT NULL,
[CreditCardID] [INT] NULL,
[CreditCardApprovalCode] [VARCHAR](15) NULL,
[CurrencyRateID] [INT] NULL,
[SubTotal] [MONEY] NOT NULL,
[TaxAmt] [MONEY] NOT NULL, [TaxAmt] [MONEY] NOT NULL, [TaxAmt] [MONEY] NOT NULL,
[Freight] [MONEY] NOT NULL,
[TotalDue] AS (ISNULL(([SubTotal]+[TaxAmt])+[Freight],(0))),
[Comment] [NVARCHAR](128) NULL,
[rowguid] [UNIQUEIDENTIFIER] ROWGUIDCOL NOT NULL,
[ModifiedDate] [DATETIME] NOT NULL
)
2.2.5. オリジナルテーブルのデータスペースの種類を変更する
1) 元のテーブルに対して
Sales.SalesOrderHeader
右クリックで「デザイン」をクリックします。
2) メニューバー "表示"->"プロパティウィンドウ" をクリックします。
3) データスペースの種類を "FILE GROUP" に変更します。通常のデータスペースの指定は "PRIMARY" がデフォルトです。
2.2.6. 元のテーブルパーティションデータをテンポラリーテーブルに移動する
ALTER TABLE [Sales]. [SalesOrderHeader] SWITCH PARTITION 1 TO [Sales]. [SalesOrderHeader_Temp] PARTITION 1
2.2.7. 元のテーブルのすべてのインデックスを作成する をテンポラリテーブル
ALTER TABLE [Sales]. [SalesOrderHeader_Temp] ADD CONSTRAINT [PK_SalesOrderHeader_SalesOrderID] PRIMARY KEY NONCLUSTERED
(
[SalesOrderID] ASC
) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_ LOCKS = ON) ON [PRIMARY]
2.2.8. 元のテーブルを削除する
DROP TABLE Sales.SalesOrderHeader
2.2.9. パーティションスキームとパーティションファンクションの削除
DROP PARTITION SCHEME SalesOrderHeader_OrderDate
DROP PARTITION FUNCTION SalesOrderHeader_OrderDate
2.2.10 テーブル名の変更
EXEC SP_RENAME '[Sales]. [SalesOrderHeader_Temp]','SalesOrderHeader'
この時点でこの記事の
SQL Server
テーブル・パーティション削除の詳細、さらに関連する
SQL Server
テーブル・パーティションの削除については、Scripting Houseの過去の記事を検索していただくか、引き続き以下の関連記事をご覧ください。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
SQL Server 2019 データベースバックアップ&リストアスクリプト(一括バックアップ)
-
Spark SQL 2.4.8 データフレームを操作するための2つの方法
-
SQLインジェクションとその防止、マイベイトの基本的な役割について
-
SQL SERVERのストアドプロシージャを使用した履歴データの移行について
-
SQL ServerのSELECT INTOとINSERT INTOのSELECTのケースを説明する
-
リレーショナルデータベースと非リレーショナルデータベースの紹介
-
SQL Server のフィルタードインデックスによるクエリ文の改善に関するパフォーマンス分析
-
SQLServerのエラーです。15404, unable to get information about Windows NT group/user WIN-8IVSNAQS8T7Administrator
-
SQLサーバーのデータベースで、SAユーザーがロックされている問題を解決する
-
SQL SERVERオープンCDC実践講座詳細