【问题标题】:DB2 migrating data to new schemaDB2 将数据迁移到新模式
【发布时间】:2013-06-02 17:31:49
【问题描述】:

我们在 DB2 数据库中有一个包含大约 700 个表的模式 - 要求是将数据从这些表迁移到新模式中的表(在同一个数据库中),两个模式中的表具有几乎相同的名称。

由于以下两个因素,要求有点棘手:

  • 新表格中的字段/列较少。
  • 旧表具有所有 VARCHAR 字段,而新表具有特定的数据类型(DATE、DECIMAL、CLOB 等)

我们正在寻找在加载和卸载流之间转换数据以及在表之间映射列的解决方案。

谢谢!

【问题讨论】:

  • 除了这两件事之外,它主要是从旧表到新表的一对一映射吗?此外,源表和目标表中的列名是否相同?如果是这样,阅读目录并吐出一个基本的脚本应该不难。
  • 是的,表之间的映射始终是一对一的。列的名称并不完全相同 - 但是有一个单独的进程(应用程序)正在为我们创建新架构,我们正在尝试通过这个应用程序创建一些表来定义列之间的映射。
  • 如果你有表对,你可以编写一个连接到数据库的程序,读取两个表的元数据,然后做你想做的事。例如,如果您想为记录少于 10K 的表生成 INSERT 语句,您的程序可以这样做……转换需要更改的字段格式。如果您想将数据写入输出文件,但只写入目标列,您可以这样做。等等。您的组织有 ODBC 或 JDBC 程序员吗?
  • 感谢@Darius,这真的很有帮助!

标签: database db2 data-migration


【解决方案1】:

这是一项非常艰巨的任务,因为源和目标相差很大。工具很难理解新表中缺少列,即使它们是空的或空值。转换也很困难,因为需要从源列中分析数据,然后检查所有这些值是否对应一个类型(但之前需要测试很多类型),然后进行匹配。

如果源表和目标表中的列名相同,则任务可能会更容易。您只需匹配名称,然后注入数据即可。

在分析了这种情况后,我得出结论,元数据在这种情况下并不是很有用,因为表的属性在迁移过程中会发生很大的变化。大多数情况下,迁移是基于元数据的,但是因为您几乎要更改所有这些,所以目录数据库几乎没用。此外,许多工具的知识基于元数据,而不是数据本身。

您正在从最通用的数据类型 varchar 中获取任何其他类型的值,并且您希望通过根据数据分配适当的数据类型来优化存储,但是,也应该这样做关系完整性;我的意思是,关系中作为主键的列的数据类型应该与其他表中的外键匹配,而不仅仅是数据类型,还有精度。最后一个是一个额外的问题,我希望你在那里有关系完整性。

我不知道有您正在寻找的智能工具。但是,我建议您进行手动操作。首先,尝试检测列名称中的策略,我的意思是,如果一列称为 address,您将知道在所有表中都是 64 的 varchar,一列称为 price可能在您的所有表格中都是双列。只需对列名进行字典分析,您就可以标准化模型。但是,您必须检查具有该名称的所有列中的值是否在该列精度中“输入”。最后一部分是一个非常耗时的过程,因为您必须从所有表中读取值,并查找每个日期类型的最长值。

【讨论】:

  • 感谢您的回复。是的,我们也在考虑手动编写脚本。较新的模式已创建,仅要迁移数据。我们有一个表,我们可以从中获取表的映射。表之间没有关系,都是独立的。
  • 有一个单独的进程(应用程序)正在为我们创建新模式。我们正在尝试通过这个应用程序创建一些表来定义列之间的映射 - 很可能是一个逗号分隔的列字符串,用于迁移数据。如果我们在这方面取得了成功,那么唯一需要破解的就是数据转换。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-24
  • 1970-01-01
  • 2016-01-30
  • 2020-01-22
  • 2021-11-11
  • 2023-03-24
  • 2017-05-20
相关资源
最近更新 更多