新しいSQLServerデータベースサーバーインスタンスを構築しました。バックアップと復元を使用して、データベースを既存のインスタンスから新しいサーバーインスタンスに移行しています。
1つの既存のデータベースには単一のFILEGROUPがあります。新しいFILEGROUPを作成し、データをこれに移動することは可能ですか?
既存のデータファイルを新しいFILEGROUPに移動できません。それで、すべてのデータベースオブジェクトを新しいFILEGROUPに手動でスクリプト化する唯一のオプションはありますか?オブジェクトを移動した後、空になったFILEを削除できますか?
スクリプトの復元:
;RESTORE DATABASE [TestDB] FROM DISK = 'I:\testDB.bak'
WITH REPLACE, FILE = 1, NORECOVERY, STATS=10,
MOVE 'TestData' TO 'H:\Test.mdf',
MOVE 'Test_log' TO 'E:\Test_log.ldf'
;RESTORE DATABASE [TestDB] WITH RECOVERY
これは、移動するテーブルに(主キー制約として、または独自に)クラスター化インデックスがある場合に実行できます。
したがって、データベースを復元し、新しいファイルグループを追加してから...
主キーの場合:-
ALTER TABLE [SCHEMA].[TABLE NAME] DROP CONSTRAINT [CONSTRAINT NAME]
ALTER TABLE [SCHEMA].[TABLE NAME] ADD PRIMARY KEY CLUSTERED
(
[Column] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [NEW FILEGROUP]
GO
クラスター化されたインデックスの場合:-
CREATE CLUSTERED INDEX [CONSTRAINT NAME] ON [SCHEMA].[TABLE NAME]
(
[Column] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = ON,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [NEW FILEGROUP]
GO
VLDBでこれを行うには時間がかかる場合があることに注意してください!