【问题标题】:Migrate SQL Server database to multiple files [closed]将 SQL Server 数据库迁移到多个文件 [关闭]
【发布时间】:2013-03-03 14:03:58
【问题描述】:

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

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

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

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

【问题讨论】:

  • 最好在 DBA.Stackexchange.com 上询问这些专家
  • 谢谢,我在那边加的,没想到有SQL专用版本!

标签: sql sql-server database-migration solid-state-drive dbcc


【解决方案1】:

如果你有磁盘空间,你可以做的是:

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

这不适用于大型对象数据,您需要手动将其移动到新表中。

语法类似于:

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

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

【讨论】:

  • 他不能在新文件组上删除并重新创建聚集索引吗?我这样做移动桌子
  • 当您使用DROP_EXISTING 时会发生这种情况。它会删除索引,然后在您指定的文件组上重建它。
  • 空间不是临时存储的问题。我会在新服务器上玩这个,看看需要多长时间。我们的索引目前有点疯狂,这是我的另一项任务,所以我有一种感觉,这会减慢收缩,但会研究一下。干杯
  • 使用选项DROP_EXISTING 比常规重建索引更有效。定期重建会导致 NONCLUSTERED 索引重建两次,而使用此选项只会重建一次。
猜你喜欢
  • 2010-10-18
  • 2013-08-19
  • 1970-01-01
  • 2011-12-22
  • 1970-01-01
  • 2010-12-28
  • 1970-01-01
相关资源
最近更新 更多