【发布时间】:2014-06-12 17:51:15
【问题描述】:
我们在 Jetty 服务器上运行了一个 Spring Hibernate、Apache Derby(数据库)Java 应用程序。
问题
我们需要将 3 个 Apache Derby 数据库(DB1、DB2、DB3)迁移到一个 MySQL 数据库中。
更新:DB1、DB2、DB3 具有相同的模式和不同的数据。
外键约束
数据库模式目前在数据库级别没有外键限制,但我们在应用程序级别有外键限制。我们有大约 100 个表要迁移到一个 Apache Derby 数据库,然后将其移动到一个 MySQL 数据库,其中一些表的记录超过 1000 万。
解决方案
-
我们考虑先将 DB1 和 DB3 合并到 DB2 中。 DB2 是最大的,因此我们正在考虑将其用作基础数据库,然后将合并的 DB2 移至 MySQL 数据库。使用 Hibernate,我可以编写一个程序,首先为 DB1 和 DB2 创建 2 个会话工厂,然后将数据从 DB1 推送到 DB2,在名为 NEW_IDS 的新临时表中创建记录,其中包含以下列。
NEW_ID - 添加的新记录的 ID
OLD_ID - 记录的 ID
TABLE_NAME - 表的名称。当我遇到一个具有外键约束的表时,我可以查找 NEW_IDS 表以找到该表的 OLD_ID 的 NEW_ID,并将设置新 ID 的 Hibernate Entity 持久保存到 DB2 中。
- 将每个 Apache Derby 数据库移动到 MySQL 数据库并拥有 3 个 MySQL 数据库,然后使用 Redgate Data Compare 之类的工具来合并数据,因为通过阅读文档,看起来它们不支持 Apache Derby 的数据比较,而只支持 SQL 服务器和甲骨文。如果我错了,请纠正我。
问题
您能否告诉我们您是否遇到过类似的情况,您遇到过什么问题,如果您发现上述两种方法有任何问题,或者您认为还有其他更好的方法吗?
【问题讨论】:
标签: mysql hibernate derby database-migration