【问题标题】:Generate upgrade script to ALTER TABLE based on CREATE TABLE statement in Oracle [duplicate]根据 Oracle 中的 CREATE TABLE 语句生成升级脚本到 ALTER TABLE [重复]
【发布时间】:2022-02-12 01:20:26
【问题描述】:

是否可以在 Oracle 中基于架构中的现有表以及具有该表的更新定义的 CREATE TABLE 语句生成一堆 ALTER TABLE 语句?

假设我有一个包含以前版本的应用程序的架构。我有一个最新版本的应用程序的安装脚本。该脚本从头开始创建所有表和序列,执行CREATE TABLE(可能还有CREATE SEQUENCE)语句。

我想在不丢失任何数据的情况下将架构更新到应用程序的最新版本(例如,不执行DROP TABLE)。

是否可以使用标准 Oracle 11gR2 或第三方组件?

【问题讨论】:

  • 没有我会 100% 信任的工具来做到这一点。但是一些使用 DBMS_METADATA_DIFF 的小脚本可能会帮助您完成大部分工作。根据您要查找的内容,此问题与 this question 重复。
  • @Jon Heller 不是 DBMS_METADATA_DIFF 额外费用选项吗?
  • @Politank-Z,我的问题不是关于迁移,而是关于正常安装的自动化。我看到了这个问题,但它问的是比较两个模式(源和目标),而我的问题是关于比较一个模式和CREATE TABLE
  • @ibre5041 是的,它需要 Oracle 变更管理包。

标签: oracle oracle11g ddl oracle11gr2


【解决方案1】:

【讨论】:

  • 看起来正是我所需要的。
  • 如果您对如何使用它或如何组织您的源代码有任何疑问,请通过网站的电子邮件与我联系
  • 谢谢! CORT 看起来很有前途,通过DDL TRIGGERs 处理修改的想法很棒。
  • 那个链接似乎在七年后失效了。
  • 我已经更新了链接并添加了github上的源代码链接
【解决方案2】:

您可以在 PLSQL 中创建一个过程来:

  • 在新数据库中不存在新表时创建新表
  • 在表存在时更改表,并使用 ALL_TAB_COLUMNS 提供给它

【讨论】:

  • 这不是一个选项,因为我必须解析 CREATE TABLE 语句来获取缺失列的列表。
  • 你找不到缺少的列与 ALL_TAB_COLUMNS 比较?
  • 如果不先在一些额外的架构上执行我的CREATE TABLE,我无法找到丢失的列。这可能代价高昂,并且由于可能存在 FOREIGN KEYs 限制,因此无法为每个 CREATE TABLE 单独完成。我必须先在辅助数据库上运行整个安装脚本,我想避免这一步。
猜你喜欢
  • 2010-12-04
  • 1970-01-01
  • 1970-01-01
  • 2019-11-27
  • 1970-01-01
  • 2017-02-18
  • 1970-01-01
  • 2011-06-09
  • 1970-01-01
相关资源
最近更新 更多