数据库迁移脚本中的错误

时间:2010-02-09 18:26:38

标签: sql oracle

对于公司,每个内部和独立开发的软件(基于Web或客户端 - 服务器)应用程序都存在以下数据库:

  • 发展(D1和D2)
  • 集成
  • 分段
  • 测试
  • 生产

生产环境在应用程序之间共享。

迁移应用程序需要:

  • 运行更改新应用程序版本的生产数据库的脚本
  • 部署新版本的软件应用程序

我的问题:

  1. 生产数据库更新脚本是否可以包含ERROR?
  2. 为什么或为什么不呢?

2 个答案:

答案 0 :(得分:2)

脚本在生产中出现意外错误当然是不可接受的。仅仅因为它的生产,我们希望确保一切正常。

至于预期的错误,这是一个品味问题。一些DDL脚本如下所示:

create table t23 
    (id number not null
     , description not null varchar2(30)
     , constraint t23_pk primary key (id))
/

prompt patch for ticket #42

alter table t23 
    add active_flag char(1) default 'N' not null
/

当此脚本作为升级生产部署时,create失败,因为该表已存在。如果预期我认为这是可以接受的。但毫无疑问,它会破坏脚本日志文件,这使得检查升级成功更加困难。这就是为什么许多人更喜欢一个单独的补丁脚本,它只应用delta,因此包含应该成功的语句。

修改

  

这是有脚本的论据吗?   运行干净?升级时   生产系统,你真的想要吗?   DBA(可能知道也可能不知道   关于系统的任何事情)   什么错误可以决定?

这当然可以是这样的论点。与在托管环境中由外包DBA应用修补程序的项目相比,编写维护脚本的人员也在生产中运行它们时,适用不同的规则。在后一种情况下,清晰度是至关重要的。

答案 1 :(得分:2)

脚本中是否存在无法处理的错误?不(例如,如果你真的必须在那里有CREATE TABLE,你可以将它放在包含在PL / SQL块中的EXECUTE IMMEDIATE中,该异常处理程序只吞下你期望获得的异常) - 所以你的脚本应该处理所有预期错误。

当dba(或者你,3个月之后,当你忘记哪些错误可以被安全地忽略)时,不必担心。