0

假设我有一个大型生产镜像1TB数据库驻留在单个MDF设备上,我想将它分解成5个200 Gig设备。 我想不中断生产。SQL服务器分割镜像分贝到多个设备

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

有没有人这样做?无论如何,当我们在镜像时,它是首选的方法吗?

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

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

感谢

...雷

+0

你可能会更好在serverfault.com – mrks 2013-04-07 16:10:54

回答

0

这是不是很简单的过程,因为它首先查找,产生的原因是,只需添加文件到SQL服务器是不够的,即使您将添加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 

此代码将创建新的文件组新的索引,摆脱旧的,如果你正在运行企业版,它将完成这一切而不会阻止用户。

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

Move data between SQL Server database filegroups

你也应该考虑分区的表,以帮助提高性能太:

Partitioning Tables and Indexes

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