将SQL Server数据库迁移到多个文件

时间:2013-03-15 00:12:55

标签: sql sql-server database-migration ssd dbcc

我正在生产一个SQL Server 2008数据库,我们正在转移到新服务器上。当前数据库只有一个~400GB .MDF个文件。新服务器将运行SQL Server 2012,我们正在运行镜像Intel 910 SSD。这些驱动器将为我们提供4x 200GB分区。

为了完成这项工作,我们需要使用.MDF将单个DBCC SHIRNKFILE with EMPTYFILE拆分为4个较小的EMPTY。我们在测试中做到了这一点,它仍然需要大约3.5个小时才能完成。现有数据库是OLTP,365/24/7,我知道在此过程中会发生阻塞,所以我们不能先在生产中进行。

我的问题是,有没有办法将数据库备份和恢复到临时位置的新服务器,创建新文件.MDF临时{{1}}到新位置,然后应用事务日志之后?这样我们可以在当前旧产品启动并运行的同时移动数据,然后进行短暂关闭,应用日志并启动新数据库?

或者是否有其他选项可以从服务器A获取一个文件,服务器B在不同驱动器上获得4个文件并且停机时间最短?

1 个答案:

答案 0 :(得分:1)

有人认为,如果你有磁盘空间,你可以做到:

  • 在新服务器上恢复数据库
  • 创建新文件组
  • 使用DROP_EXISTING=ON在新文件组上创建所有索引(并指定新文件组)
  • 删除旧文件组

这对大对象数据不起作用,您需要手动将其移动到新表。

这个的语法类似于:

CREATE CLUSTERED INDEX [index]  
ON [schema].[table]([columns)
WITH (DROP_EXISTING = ON, ONLINE = ON) 
ON [filegroup]

索引可能会在创建新索引时保持在线状态。这将导致tempdb使用更多空间。