web-dev-qa-db-ja.com

すべてのヒープテーブルをSQL Serverの別のファイルグループに移動する

SQL Server 2017で、DBのすべてのヒープをセカンダリファイルグループに移動したいと考えています。これを行う最も簡単な方法は何ですか?

この質問は、非クラスター化インデックスのみを対象としています。

https://stackoverflow.com/questions/4237238/moving-all-non-clustered-indexes-to-another-filegroup-in-sql-server

古いレガシーデータベースを最適化するプロセス。

  • 上記のスタックオーバーフローリンクと同様のカーソルループですべてのヒープテーブルを移動するスクリプトを記述したいと思います。
2
user180724

私の知る限り、2つのオプションがあります。

  • データを物理的に移動します。セカンダリファイルグループに新しい空のヒープを作成する/データをコピーする/オブジェクトの名前を変更する、暗黙的なトランザクション内のすべて。インデックスや制約などのスクリプトを作成することを忘れないでください。
  • セカンダリファイルグループにクラスター化インデックスを作成し、削除します。

私は最初のオプションを好みます。

3
Danilo Braga

以下の解決策は、目標を達成するのに役立ちます:-

  1. テーブルにクラスター化インデックスを作成し、セカンダリファイルグループに移動することを言及します。以下のリンクを参照してください。 https://www.mssqltips.com/sqlservertip/2442/move-data-between-sql-server-database-filegroups/

  2. セカンダリファイルグループに同じ列を持つ別のテーブルを作成します。パフォーマンスを最適化するために、データをチャンクで1つのテーブルから別のテーブルにコピーします。これにより、データがセカンダリファイルアロケーションユニットにコピーされます。次に、最初のテーブルをドロップし、セカンダリテーブルの名前を変更します。テーブルが依存関係を持っている場合、ステップが存在する可能性があります。

2
Vinod Narwal