0

別のパーティションに配置されている約 300 のテーブルがあり、現在、これらのテーブルは以前のように巨大なデータには使用されていません。現在、スペースの問題が時々発生しており、貴重なスペースの一部がこれらのテーブル用に作成された 150 個のファイル グループによって占められているため、テーブルのファイル グループを 150 FG ではなく任意のファイル グループに変更し、これらのファイル グループを削除してスペースを解放したいと考えています。 .

参考までに: これらのテーブルは現在データを保持していませんが、多くの制約とインデックスを定義しています。

どうすれば効率的に行うことができるか教えてください。

4

2 に答える 2

1

テーブルを移動するには、新しい FG を指定してクラスター化インデックスを削除し、再作成します。クラスター化インデックスがない場合は、作成してから削除します。

ユーザー データをプライマリ FG に保持しないことをお勧めします。システム オブジェクトはそのままにして、データを他のファイル グループに配置します。しかし、多くの人はこれを無視しています...

于 2016-12-02T09:14:12.987 に答える
0

既存のテーブルの FG グループを変更する方法について、さらにいくつかの情報を見つけました。

1- NEW_FG を使用してすべてのオブジェクトでクラスター化インデックスを定義します (@under answer で言及)

CREATE UNIQUE CLUSTERED INDEX <INDEX_NAME> ON dbo.<TABLE_NAME>(<COLUMN_NAME>) ON [FG_NAME]

2-クラスター化インデックスを定義できない場合は、テーブルとデータ構造を新しいテーブルにコピーし、古いものを削除して、以下のように新しいものを古いものに名前変更します

データベースのデフォルト FG を NEW_FG に変更して、デフォルトでその新しい FG の下に INTO を使用してすべてのテーブルを作成できるようにします。

ALTER DATABASE <DATABASE> MODIFY FILEGROUP [FG_NAME] DEFAULT

IF OBJECT_ID('table1') IS NOT NULL 
BEGIN
    SELECT * INTO table1_bkp FROM table1
    DROP TABLE table1
    EXEC sp_rename table1_bkp, table1
END

やっぱり操作はデータベースのデフォルトFGのまま

ALTER DATABASE <DATABASE> MODIFY FILEGROUP [PRIMARY] DEFAULT

3-可能であればテーブルを削除し、NEW_FGを使用して再度作成します

DROP TABLE table1 
CREATE TABLE [table1] ( 
    id int,
    name nvarchar(50),
    --------
) ON [NEW_FG] 
于 2016-12-13T13:09:40.063 に答える