0

假设我有一个大型生产镜像 1TB 数据库,它驻留在单个 MDF 设备上,我想将其拆分为 5 200 Gig 设备。我想在不中断生产的情况下做到这一点。

我认为我可以打破镜像并使用 RESTORE 过程创建镜像以快速实现拆分到多个设备,而不会中断生产。这样做两次可以让我在几个小时内完成这项工作。

有人做过吗?它是我们在镜像时看到的首选方法吗?

我的其他选择,优点和缺点是什么?和陷阱?

此外,我还记得另一个更有机的过程,即创建 5 个新的新设备,不知何故,随着时间的推移,将对象转移到新设备上。不确定这个过程,但我似乎记得它正在讨论。听起来这可能需要很长时间,并且有时可能会导致一些时钟?

谢谢

...射线

4

1 回答 1

0

这并不像最初看起来那么简单,原因是仅仅将文件添加到 SQL Server 是不够的,因为即使您要添加 4 个新文件,它们都将是空白空间,您会有一个包含 1Tb 数据的文件和 4 个空文件,由于 SQL Server 对文件使用比例填充方法,这些文件最终会被填满,但您的大多数查询仍然会命中单个文件。

我认为您这样做是为了提高性能?如果是这样,您将需要将数据移动到不同的文件中,以便实际拆分数据。您是否可以在线执行此操作取决于您是否正在运行 Enterprise Edition(因为这允许您在线重建索引)。

移动表(或更准确地说是聚集索引,在所有意图和目的上与表几乎相同)的一种简单方法是使用新数据文件添加新文件组,然后重建聚集索引,指定新文件组,您可以使用以下方法执行此操作:

CREATE CLUSTERED INDEX Existing_Index_Name ON schema_name.table_name(column_name) 
WITH(DROP_EXISTING=ON,Online=ON) on [new_filegroup_name]
GO

此代码将在新文件组上创建新索引,摆脱旧索引,如果您正在运行企业版,它将在不阻止用户的情况下完成所有操作。

有关在文件组之间移动数据的更多方法,请参见以下链接:

在 SQL Server 数据库文件组之间移动数据

您还应该考虑对表进行分区以帮助提高性能:

分区表和索引

关于您的镜像设置,您应该打破镜像,然后在主服务器上添加所有文件/文件组,然后在文件组之间移动数据,然后在主服务器上备份修改后的数据库,在镜像上恢复(所以所有文件在镜像上设置相同),然后重新设置镜像。

于 2013-04-08T14:02:09.587 回答