web-dev-qa-db-ja.com

テーブルパーティションを削除する方法

SQL Server 2012データベースのテーブルからパーティションを削除したいのですが。テーブルには主キーがありますが、パーティション列は主キーではありません。また、データ構造とスキーマをそのまま維持したいと思います。

私は試した:

select * 
into [dbo].[new_Non_partitioned_Table] 
from [dbo].[partitioned_table]

次に、パーティションテーブルを削除し、新しいテーブルの名前を変更しました。ただし、データ構造と一部の依存関係(FK)が失われ、制約を削除する必要がありました。これは本番用であり、データの損失は許されません。

既存のテーブルからパーティションを削除するより良い方法はありますか?

2
user42148

テーブルのインデックスを、パーティションスキーマではなくファイルグループに再構築します。

次の順序で行います。

  • クラスターインデックスの[MyFileGroup]にCREATE INDEX WITH DROP EXISTING
  • すべての非クラスター化インデックスで[MyFileGroup] WITH DROP EXISTINGにCREATE INDEX(一度に1つ)

ある程度のダウンタイムが発生する可能性がある場合は、まずスクリプトを作成して非クラスター化インデックスを削除し、クラスターインデックスを再構築してから、非クラスター化インデックスを再適用します(もちろん、パーティションスキーマではなく、ファイルグループを対象としています)。

これは、SQL Serverインデックスビルドエンジンを使用して高い同時実行性で実行できるため、パーティションをマージするよりも高速です。

このトリックを使用すると、スキーマはそのまま残り、すべてを別のテーブルに移動する必要はありません。 SQL Serverのエディションによっては、これをオンラインで実行できる場合もあります。

6
Thomas Kejser

パーティション境界を削除したい場合、MERGEステートメントはそれを行います:-

ALTER PARTITION FUNCTION PartitionFunctionName()
MERGE RANGE (Boundary Value);
GO

データ自体をパーティション分割されたテーブルから移動する場合は、データを「切り替える」ためのテーブルが必要です。 2番目のテーブルは、元のテーブルとまったく同じ構造と制約を持つ必要があります。次に、以下を実行できます。

ALTER TABLE dbo.[Original Table]
SWITCH PARTITION 1
TO dbo.[Switch Table];
GO

私はここで私のブログにパーティトンの管理に関するいくつかの投稿を書きました:- http://dbafromthecold.wordpress.com/2014/06/04/partitioning-basics-part-1/

アンドリュー

2
dbafromthecold