将三个derby数据库迁移到一个MySQL数据库

时间:2014-04-27 05:37:04

标签: mysql hibernate derby database-migration

我们在Jetty服务器上运行了Spring Hibernate,Apache Derby(数据库)Java应用程序。

问题

我们需要在一个MySQL数据库中迁移3个Apache Derby数据库(DB1,DB2,DB3)。

更新:DB1,DB2,DB3具有相同的模式,具有不同的数据。

外键约束

数据库模式当前在数据库级别没有外键限制,但我们在应用程序级别有外键约束。我们有大约100个表要迁移到一个Apache Derby数据库,然后将其移动到MySQL数据库,其中一些表的记录超过1000万。

解决方案

  1. 我们首先考虑将DB1和DB3合并到DB2中。 DB2是最大的,因此我们考虑将其用作基础数据库,然后将合并的DB2移动到MySQL数据库。使用Hibernate我可以编写一个程序,首先为DB1和DB2创建2个会话工厂,然后将数据从DB1推送到DB2,在一个名为NEW_IDS的新临时表中创建记录,其中包含以下列。

    NEW_ID - 添加的新记录的ID
    OLD_ID - 记录的身份
    TABLE_NAME - 表格的名称。

    当我遇到一个有外键约束的表时,我可以查找NEW_IDS表来查找该表的OLD_ID的NEW_ID,并持久化Hibernate Entity将新的ID设置到DB2中。

  2. 将每个Apache Derby数据库移动到MySQL数据库并拥有3个MySQL数据库,然后使用Redgate Data Compare等工具合并数据,因为通过阅读文档看起来他们似乎不支持Apache Derby的数据比较,但仅限于SQL服务器和Oracle。如果我错了,请纠正我。
  3. 问题

    您能告诉我们您是否遇到过类似的情况以及您遇到的问题吗?如果您发现上述两种方法存在任何问题,或者您认为其他任何方法会更好。

1 个答案:

答案 0 :(得分:0)

是的我遇到了同样的情况,我想从5个小型DB中制作一个数据库。首先告诉我们所有具有不同表或相同的DB(DB1,DB2,DB3)?我遇到的问题是所有数据库中的主键都相同。就我而言,所有5个DB都有相同的表。

对于例如。

DB1具有表格使用1到10k主键的人员

DB2再次使用具有1到6k主键的Person表

所以合并将很困难。