基于Oracle中的CREATE TABLE语句生成升级脚本到ALTER TABLE

问题描述:

Oracle中是否有可能根据模式中的现有表加上CREATE TABLE语句生成一堆ALTER TABLE语句,并使用新表定义该表?基于Oracle中的CREATE TABLE语句生成升级脚本到ALTER TABLE

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

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

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

+0

没有工具我会信任100%做到这一点。但是使用DBMS_METADATA_DIFF的一些小脚本可能会让你获得最大的成功。根据你正在寻找什么,这个问题是[这个问题]的副本(http://*.com/q/19574971/409172)。 – 2015-02-23 17:10:14

+0

@Jon Heller不是DBMS_METADATA_DIFF额外费用选项? – ibre5041 2015-02-23 17:40:30

+0

@ Politank-Z,我的问题不是关于迁移,而是关于正常安装的自动化。我看到了这个问题,但它只是比较两个模式(源和目标),而我的问题则询问比较模式和CREATE TABLE。 – 2015-02-23 18:54:06

你可以尝试CORT:www.softcraftltd.co.uk/cort它是免费的

+0

它看起来正是我所需要的。 – 2015-02-23 19:01:48

+0

如果您有任何问题如何使用它或如何组织您的源代码,请通过电子邮件联系我的网站 – Rusty 2015-02-24 08:50:00

+0

谢谢! CORT看起来非常有前途,通过DDL TRIGGER处理修改的想法非常出色。 – 2015-02-24 12:29:19

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

  • 创建新表时,它不会在新的数据库中存在
  • 当它存在,喂养它的alter table ALL_TAB_COLUMNS
+0

这不是一个选项,因为我不得不解析CREATE TABLE语句来获取缺失列的列表。 – 2015-02-23 18:49:10

+0

通过比较ALL_TAB_COLUMNS找不到缺失的列? – 2015-02-23 18:52:59

+0

我无法在首先执行一些额外架构的“CREATE TABLE”时找到缺失的列。这可能是昂贵的,并且由于可能的FOREIGN KEY的限制,不能为每个“CREATE TABLE”单独完成。我必须先通过辅助数据库运行整个安装脚本,并且我想避免这一步。 – 2015-02-23 18:59:25