将列添加到Oracle OLTP表

时间:2011-02-10 05:51:23

标签: oracle alter-table ora-00054

我正在尝试在应用程序运行和忙碌时将可为空的列添加到Oracle 10 OLTP数据库中常用的表中。添加可空列只是数据字典更改,因此任何表锁只能保持很短的时间(可以由系统处理)。

问题是我的ALTER TABLE经常因此而失败:

ORA-00054: resource busy and acquire with NOWAIT specified

我目前的做法是通过运行来改变输入,直到桌面上没有锁定为止。这意味着我无法在SQL * Plus中完整地运行这样的脚本,但需要复制并粘贴每个语句并确保它有效。

有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

蛮力方法怎么样?将它置于无限循环中并在完成后退出。伪代码(尚未检查):

create or replace 
procedure execDDL(ddl in varchar2) is
   myexp EXCEPTION;
   pragma exception_init (myexp, -54);
begin

 loop
   begin
      execute immediate ddl;
      exit;
   exception
      when myexp then 
         null;
 end loop;
 end;