2009-11-20 135 views
0

我们的应用程序体系结构允许我们在单个数据库中托管多个客户端,并托管多个数据库。这使我们可以通过跨多个数据库分发客户端来扩展。例如,20个客户端可以在数据库A中,另外15个客户端可以在数据库B中。我们几乎在每个表中使用ClientID字段来分区客户端数据。我们所有的表主键都是INT标识TableID字段。将客户端数据从一个数据库移动到新数据库

我正在寻找一个工具/脚本,它可以帮助我从一个数据库中提取客户数据,并将其移动到一个全新的数据库中(所以PK可以保持不变)。我希望这已经存在,所以我们不必建立自己的。这种方式非常灵活,但理想情况下它只是生成一个大的.sql文件,其中包含所有必要的INSERTS以正确的顺序移动数据,另一个SQL文件包含所有必需的DELETES以删除源数据。

如果这有什么差别,我们是SQL Server 2008的

回答

1

如果你有标准或企业,你确实有SSIS。虽然它可能不符合“工具”的条件,但在这种情况下实现起来相当容易。

+0

好的,将检查SSIS,看看它能做什么。谢谢。 – Linus

0

不是你可能会寻找答案,但你应该考虑使用GUID作为重点。这将确保您拥有某种类型的所有记录的唯一标识符,并且可以避免与身份密钥/基于整数的索引冲突。如果在数据库之间迁移时出现问题,它将增加另一程度的可追溯性。

SplendidCRM从其他数据库系统导入数据时使用此技术。


更新:

我的假设是,数据库之间传输数据的操作并不频繁,并且你所需要的数据库架构该任务。我将使用GUID作为查找键来专门验证数据传输,但我不会将它用作标准操作(如URL)的连接的主键。尽管跨数据库是唯一的,但权衡是GUID缓慢。

换句话说,GUIDS除了现有的主键之外,还可以作为验证你应该出现问题的手段。如果您需要数据库A中的ClientID以在数据库B中保留相同的值,那么作为该标识符的标识列将成为问题。您可能必须创建另一个不是“自动生成”的标识符。这可能不是GUID,但我的直觉是仅仅用整数就不够了。也许你可以创建一个列,它是身份密钥,客户名称和数据库名称的散列,或者更简单地说,只需将这些列连接到一个varchar列。

+0

大卫,如果你使用GUID键并做了很多连接,那么性能是否有影响?另外,我们没有走这条路线的一个原因是我们认为在引用资源时会弄乱我们的应用程序URL。 – Linus

1

为此,我可以推荐redgate SQL DataCompare,我们用它来同步数据,并使用它们的SQL Compare来同步数据库模式。

这两种工具都可以输出sql,你可以自己执行,或者这些工具可以自己执行sql脚本。

他们有一个命令行版本的工具,所以你可以在部署脚本中使用它们,我没有试过这个。

他们都工作得很好,毫无疑问是值得的价格。

+0

AndreasN,谢谢你的推荐。只是要清楚,但我没有做任何比较或同步。我想要做的是将一批基于ClientID的相关数据从一个数据库移动到另一个数据库。这个工具能做到吗? – Linus

+0

你不能用SQL-Server内部的工具来做到这一点吗? SSIS等 – AndreasN

+0

也许吧。不太熟悉SSIS。我想我会检查一下。 – Linus

相关问题