【问题标题】:Sql 2005 data migrationSql 2005 数据迁移
【发布时间】:2009-01-21 10:25:34
【问题描述】:
我在两台不同的机器上运行相同的数据库。数据库广泛使用身份列,并且这些表发生了非常可怕的冲突。我现在想将这两者合并在一起,然后再解决我可能会做的根本问题
A) 使用 GUID(笨重但在任何地方都可以使用)
B)分配身份范围,有点naff,但意味着您仍然可以按顺序访问记录,敲击基本Sql并轻松选择记录,并且它可以识别哪台机器源自数据。
我的问题是,在其中一个数据库上重新键入(即更改主键)以使数据不再发生冲突的最佳方法是什么。我们只查看总共 6 个表,但 3 个表中有很多行 ~ 2M。
更新 - 是否有任何真正的 sql 代码可以做到这一点,我知道 Identity Insert 等。我之前已经以多种不优雅的方式解决了这个问题,我一直在寻找优雅的解决方案,更可取使用一个不错的 TSQL SP 来完成这项工作 - 如果不存在,我会将其编码并放置在 wiki 上。
【问题讨论】:
标签:
sql-server
ssis
identity
【解决方案1】:
一种简单的方法是将其中一个数据库上的所有键更改为固定增量,例如 10,000,000,然后它们将对齐。为此,您必须关闭应用程序以使数据库保持安静,并删除所有受此影响的 FK 引用,并在完成后重新创建它们。您还必须将所有受影响的身份列上的种子值重置为适当的值。
有些表会是引用数据,如果不同步的话合并起来会比较复杂。您可能会遇到冲突代码的问题,这些代码在不同的实例上意味着相同的事物,或者相同的代码具有不同的含义。这可能是您的应用程序的问题,也可能不是问题,但是如果实例在运行时没有在它们之间进行协调,您可能需要仔细检查这一点。
此外,如果没有规范的来源,姓名和地址等数据非常可能不同步。您可能需要解决这些问题,运行匹配查询并让业务部门整理所有异常情况。
【解决方案2】:
我会先在表格中添加另一列,用新的Primary key 填充它。
然后我会使用更新语句来更新所有相关表中的新 foreign key 字段。
然后您可以删除旧的Primary key 和旧的foreign key 字段。