我希望有一个CI构建(例如,Hudson)设置并拆除Oracle 11g架构,作为一个相当普通的JSF / JPA应用程序的每晚构建/测试周期的一部分。
最明显的方法是删除并重新创建所有表。虽然这感觉相当标准(至少,这就是Hibernate / JPA工具会为您自动完成的),但我已经让Oracle DBA警告我,在重复的对象创建/删除周期后,Oracle目录将会碎片化。最终这会导致性能问题,因为SYSTEM表空间无法进行碎片整理/合并。
我的问题是:
谢谢!
答案 0 :(得分:7)
不要相信那些DBA
使用本地管理的表空间(LMT)时至少有10g及以上,这应该不是问题。
即使这确实造成任何碎片,我也非常怀疑你能否衡量其影响 - 尤其是在用于CI的数据库上。
答案 1 :(得分:2)
我正在为我的第二个Oracle项目安装CI构建流程。我不认为丢弃和重新创建一切都会造成任何伤害(如上所述a_horse_with_no_name)。我很高兴听到你正在考虑将CI扩展到数据库对象 - 太多的团队没有。
另一种方法可能是每晚从最近的备份恢复数据库(或使用闪回数据库),并在每次CI运行时将应用程序从“生产备份”迁移到当前的开发状态。通过这种方式,最终将应用于生产的代码将每晚进行测试,以反映与生产大致相同的内容。如果您已经考虑过CI,那么思考会有所改变,但不会有太多变化。
如果你喜欢尝试迁移方法,我有一个我一直在努力的工具可能会有所帮助 - http://dbgeni.com它仍处于开发阶段,但我设计了CI并通过迁移管理数据库更改记住。