迁移到新数据库

pri*_*iya 2 sql-server migration

我们有一个奇怪的情况。我们有一个旧数据库和新数据库,两者都采用不同的架构(SQL Server)。我们正在使用 abinitio 将数据从旧数据复制到新数据。

现在如果由于某种原因新结构对我们不起作用,我们需要一个回滚计划来将数据从新的复制到旧的。但这也可能意味着在新的和插入中更新的记录。

此外,如果这必须在客户不停机的情况下完成,我们如何才能做到这一点?

Bre*_*zar 5

这根本不是一个奇怪的情况——许多项目经理说他们想要这个,直到他们发现它有多难。这比听起来要困难得多。让我们以一个简化的场景来说明:

客户V1表,您正在远离的原始糟糕设计:

  • CustomerID 唯一标识符
  • 客户名称 varchar(100)
  • BalanceOutstanding - 十进制,他们欠我们的总金额

客户V2表,新设计:

  • CustomerID - 整数,自动编号的身份字段
  • CustomerName nvarchar(100) - 因为现在我们要存储 unicode 数据
  • (没有 BalanceOutstanding 字段 - 相反,我们将让应用程序通过查询其他几个表来计算当前余额)

从CustomersV1 迁移到CustomersV2 已经够难的了,但是你如何处理:

  • 保持旧 CustomerID 到新 CustomerID 的映射
  • 如果客户将 unicode 数据放在新的 CustomersV2.CustomerName 中会发生什么,由于数据类型不匹配,该数据根本无法发送回 CustomersV1.CustomerName
  • 更改应用程序代码以引用通过不同方式收集的 BalanceOutstanding

实际上,我曾参与过几个项目经理想要完成这样的事情,但是一旦我们甚至将更改仅对一张表进行了白板处理,他们意识到我们无法以客户愿意支付。

一直在一个项目中,客户没有工资,这里的他们怎么做:

  • 构建自定义 SSIS 包以保持数据在两个方向同步
  • 构建复杂的业务规则来处理我们上面讨论的场景(如果有人将数据存储在旧模式无法处理的新模式中会发生什么 - 在这种情况下,客户愿意走开并丢失这些数据)
  • 反复测试双向迁移,直至上线
  • 提前几个月冻结双方的数据库模式,以防止更改复杂的 SSIS 包

因此,要开始与您的管理层进行讨论,请在其中一个复杂表中列出差异,并在白板上列出如果他们必须从新模式故障恢复到旧模式会发生什么。讨论丢失数据的方式,以及构建来回迁移数据的应用程序需要多少工作。