几个Oracle Pl/SQL包的编译可以是一个原子操作吗?

几个Oracle Pl/SQL包的编译可以是一个原子操作吗?,oracle,plsql,compilation,atomic,Oracle,Plsql,Compilation,Atomic,如果我将N个pl/sql包部署到Oracle DB,是否可以使其编译原子化,即在成功编译所有包后应用这些包中的更改?CREATE或REPLACE和ALTER PACKAGE是DDL语句,每个DDL语句都是离散事务。在每个DDL命令之前和之后都会发出COMMIT;这就是DDL没有回滚的原因 在我看来,您存在配置管理问题。配置管理,加上源代码控制,是解决问题的方法。将所有PL/SQL脚本(见鬼,只是所有脚本)置于版本控制之下。当您部署一些PL/SQL程序的新版本时,也要检查以前的版本(到一个单独的子

如果我将N个pl/sql包部署到Oracle DB,是否可以使其编译原子化,即在成功编译所有包后应用这些包中的更改?

CREATE或REPLACE和ALTER PACKAGE是DDL语句,每个DDL语句都是离散事务。在每个DDL命令之前和之后都会发出COMMIT;这就是DDL没有回滚的原因


在我看来,您存在配置管理问题。配置管理,加上源代码控制,是解决问题的方法。将所有PL/SQL脚本(见鬼,只是所有脚本)置于版本控制之下。当您部署一些PL/SQL程序的新版本时,也要检查以前的版本(到一个单独的子目录中,或者在您的deploymenet机制下有意义的任何目录中)。然后,如果包的新版本有任何问题,那么重新部署旧版本是很容易的

因为包是可编辑的,所以您可以查看。这将为您提供一种在软件包版本之间自动切换的方法。

这里的其他答案很好(例如,基于版本的重新定义,在11gR2中提供)


提供的另一个选项是,它可以配置为在“真正”编译之前进行测试编译(将包编译为替代名称)。

True,但问题是,环境就像对冲基金。仅仅因为在测试中整齐地部署了一些东西并不能保证它在生产中会这样做。