Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database DB2将数据迁移到新模式_Database_Db2_Data Migration - Fatal编程技术网

Database DB2将数据迁移到新模式

Database DB2将数据迁移到新模式,database,db2,data-migration,Database,Db2,Data Migration,我们在DB2数据库中有一个模式,大约有700个表——要求将数据从这些表迁移到一个新模式中的表(在相同的数据库中),两个模式中的表具有几乎相同的名称 由于以下两个因素,该要求有点棘手: 新表中的字段/列更少 旧表具有所有VARCHAR字段,而新表具有特定的数据类型(日期、十进制、CLOB等) 我们正在寻找在加载和卸载流之间转换数据以及在表之间映射列的解决方案 谢谢 这是一项非常困难的任务,因为源和目标差异很大。工具不容易理解新表中缺少列,即使它们是空的或空的。强制转换也很困难,因为需要分析源列

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

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

  • 新表中的字段/列更少
  • 旧表具有所有VARCHAR字段,而新表具有特定的数据类型(日期、十进制、CLOB等)
我们正在寻找在加载和卸载流之间转换数据以及在表之间映射列的解决方案


谢谢

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

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

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

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


我不知道有什么工具像你要找的那样聪明。不过,我建议你做手工工作。首先,尝试在列名称中检测一个策略,我的意思是,如果一个列被称为address,您将知道在所有表中,varchar是64,在所有表中,一个名为price的列可能是double。只需对列名进行词典分析,就可以使模型标准化。但是,您必须检查具有该名称的所有列中的值在该列中是否为“enter”。最后一部分是一个非常耗时的过程,因为您必须从所有表中读取值,并查找每个日期类型的最长值。

感谢您的回复。是的,我们也在考虑手动脚本编写。较新的架构已创建,只需迁移数据。我们有一个表,从中可以得到表的映射。表之间没有关系,所有表都是独立的。有一个单独的进程(应用程序)正在为我们创建新的模式。我们正试图通过这个应用程序创建一些表来定义列之间的映射——很可能是一个逗号分隔的列字符串,数据将被迁移。如果我们在这方面取得了成功,那么唯一需要破解的就是数据转换。除了这两件事之外,它主要是从旧表到新表的一对一映射吗?此外,源表和目标表中的列名是否相同?如果是这样的话,阅读目录并写出一个基本的脚本就不难了。是的,表之间的映射总是一对一的。列的名称不完全相同-但有一个单独的进程(应用程序)正在为我们创建新的架构,我们正试图通过此应用程序创建一些表来定义列之间的映射。如果您有表对,您可以编写一个程序连接到数据库,读取两个表的元数据,然后做你想做的事。例如,如果您想为记录少于10K的表生成INSERT语句,您的程序可以这样做。。。转换需要更改的字段格式。如果要将数据写入输出文件,但仅写入目标列,则可以这样做。等等您的组织有ODBC或JDBC程序员吗?谢谢@Darius,这真的很有帮助!