【问题标题】:Deploy ddl as declarative xml states将 ddl 部署为声明性 xml 状态
【发布时间】:2015-07-07 16:03:44
【问题描述】:

我正在使用 Oracle 数据库,而你们中的许多人在部署 DDL 语句时遇到同样的问题,因为它们不是声明性的。

我正在寻找一种工具,可以将表结构/序列/约束/索引从一个实例导出为 XML 文件并将其导入另一个实例。此外,我希望导入是智能的,我的意思是如果导入表和现有表之间的区别是在模式中添加了一个新列,则执行“更改表添加列”。如果更改了列类型,则执行“alter table modify”,创建缺失的表/约束/索引等等。

这样我可以以声明的方式对数据库状态进行版本控制,并将此类 XML 存储在版本控制系统中。

现在我不是在寻找查找表的内容,而是在寻找结构。

有什么建议吗?

【问题讨论】:

  • 是否有理由需要临时 XML 文件?与 SQL 脚本相反?几乎任何 PL/SQL IDE(TOAD、SQL Developer 等)都能够连接到两个不同的数据库并生成所需的 DDL,通过生成适当的 DDL 语句使一个数据库看起来像另一个数据库。但是,实现原始更改的开发人员通常会将其原始脚本签入源代码控制,而不是对每个更改进行逆向工程,因为这样会更清楚您指定的内容和默认设置的内容。
  • 是的,@JustinCave,我们已经尝试过这种技术,但它仍然会导致将 DDL 更改脚本保存到源代码控制中。我想要的是保存状态和一种将实例从一种状态移动到另一种状态的算法,就像我们存储包状态一样。而且我还想将该 XML 包含到我的补丁中,以便在生产实例上进行处理。我真的很想把表作为包来操作。

标签: xml oracle deployment ddl


【解决方案1】:

我不知道目前存在这样的事情..

您对表格的 XML 表示的第一个要求是相对简单的

create table my_table (col1 varchar2(10),col2 number(5,3), col3 DATE);
Table MY_TABLE created.

set pagesize 500
set long 10000
select SYS.dbms_metadata.get_sxml('TABLE','MY_TABLE') from dual;
SYS.DBMS_METADATA.GET_SXML('TABLE','MY_TABLE') -------------------------------------------------- ------------------------------ MI_PARMY_TABLECOL1VARCHAR210COL2数字5精度> 3COL3日期10401用户是记录> N压缩> 表>

至于将其转换为作为练习留给读者的增量......:p

但是说真的.. 选项会将此 XML 传递给目标数据库上的脚本/过程。它将进行比较,生成 delta 和 eiterh 输出返回给用户或通过dbms_sql/execute immediate直接应用

对不起,如果我没有更多帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多