Добавление столбца в таблицу Oracle OLTP - PullRequest
3 голосов
/ 10 февраля 2011

Я пытаюсь добавить обнуляемый столбец в часто используемую таблицу в базе данных Oracle 10 OLTP, когда приложение работает и занято. Добавление обнуляемого столбца - это только изменение словаря данных, и поэтому любая блокировка таблицы удерживается только в течение короткого периода времени (который может обрабатываться системой).

Проблема в том, что мой ALTER TABLE часто терпит неудачу с этим:

ORA-00054: resource busy and acquire with NOWAIT specified

Мой текущий подход заключается в том, чтобы запутать изменение, запустив его до тех пор, пока на столе не будет никаких блокировок. Это означает, что я не могу запустить такой скрипт в SQL * Plus полностью, но мне нужно скопировать и вставить каждый оператор и убедиться, что он работает.

Есть ли лучший способ?

1 Ответ

2 голосов
/ 10 февраля 2011

Как насчет подхода грубой силы? Поместите это в бесконечный цикл и выйдите, когда закончите. Псевдокод (не проверил):

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;
...