将客户端数据从一个数据库移动到一个新数据库

时间:2009-11-20 12:53:45

标签: sql-server

我们的应用程序架构允许我们在单个数据库中托管多个客户端,并且还托管多个数据库。这允许我们通过在多个数据库中分配客户端来扩展。例如,20个客户端可以在数据库A中,另外15个可以在数据库B中。我们在几乎每个表中使用ClientID字段来分区客户端数据。我们所有表的主键都是INT identity TableID字段。

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

如果它有任何区别我们在SQL Server 2008上。

3 个答案:

答案 0 :(得分:1)

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

这两个工具既可以输出sql,也可以自己执行,或者工具可以自己执行sql脚本。

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

他们都工作得很好,无疑是物有所值。

答案 1 :(得分:1)

如果您有标准版或企业版,则可以使用SSIS。虽然它可能不具备“工具”的条件,但在这种情况下实现起来相当容易。

答案 2 :(得分:0)

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

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


更新

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

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