在不同的驱动器上创建文件组并将表移动到其中

时间:2010-06-21 19:20:48

标签: sql sql-server

如何在使用MSSQL 2005的其他驱动器上创建文件组,然后将表格移入其中?

例如:我的数据库位于H:\ Product.mdf和H:\ Product.ldf

我想在F:\ FileGroup \上创建一个新文件组,然后将带有聚簇索引的表移动到这个新文件组。

1 个答案:

答案 0 :(得分:3)

这不是一项简单的任务,根据您的表的大小,可能需要一大堆停机时间。

首先,您必须定义新文件组:

ALTER DATABASE MyDatabase
 add filegroup NewGroup

然后,为该文件组创建适当的文件,例如:

ALTER DATABASE MyDatabase
 add file
  (
    name = NewFile
   ,filename = 'C:\temp\NewFile.ndf'
   ,size = 100MB
   ,maxsize = unlimited
   ,filegrowth = 100MB
  ) 
 to filegroup NewGroup

要将表移动到文件组,您必须在文件组上为该表创建聚簇索引。如果您有一个集群约束(例如唯一或主键),则必须先将其删除。这是移动这样一张桌子的一种方法:

--  Set up sample table
CREATE TABLE MyTable
 (
   Data varchar(100) not null
   constraint PK_MyTable
    primary key clustered
 )

--  Can't "move" primary key constraint to a new file group
ALTER TABLE MyTable
 drop constraint PK_MyTable

--  This will move the data in the table to the new file group
CREATE clustered index Move_MyTable
 on MyTable (Data)
 on NewGroup

--  Still in the new file group, just no index
DROP INDEX MyTable.Move_MyTable

--  Recreate the primary key, keeping it on the new file group
ALTER TABLE MyTable
 add constraint PK_MyTable
  primary key clustered (Data)
  on NewGroup

这只是有点挑剔,所以一定要先测试数据库副本上的所有内容!