【问题标题】:Disable foreign keys or pay attention to creation order禁用外键或注意创建顺序
【发布时间】:2020-03-10 14:08:16
【问题描述】:
我目前正在开发一个 java 应用程序,用于将 Oracle 数据库的数据迁移到我使用 liquibase 迁移的等效结构化 SQL Server 数据库。现在也很难管理迁移所有外键,因为许多外键都依赖于其他外键,所以我想到了两种解决方案:
- 在迁移之前禁用所有外键,然后再次启用它们
- 注意以正确的顺序创建外键,以便它们以相同的方式创建
第二种方法对我来说听起来更困难,但在某种程度上更安全,而第一种方法听起来更容易,但可能会出错或容易出错。实际上,我不确定哪一个会起作用。哪种方式比较好?
【问题讨论】:
标签:
sql
sql-server
database
oracle
migration
【解决方案1】:
我的理解是:使用 liquibase,您可以将表结构从 Oracle 迁移到 SQLServer。要迁移数据,我建议使用 sqlplus 和查询将数据从 Oracle 卸载到平面文件,然后使用 bcp 将其加载到 SQLServer。数据迁移后,我会创建索引和约束。从主键开始,然后是外键。为了使卸载的数据保持一致,我会将 Oracle 置于静默模式 - 仅允许 SYS 命令。 sqlplus 和 bcp 是供应商的专用工具。非常快速且可靠。
使用自定义构建的应用程序进行迁移几乎相同 - 只需将 sqlplus/bcp 替换为您的应用程序。在没有索引和约束的情况下,数据将更快地加载到 SQLServer,因此先迁移数据稍后再创建索引和约束。