3

アプリケーションの実行中およびビジー状態のときに、Oracle10OLTPデータベースで頻繁に使用されるテーブルにNULL可能列を追加しようとしています。null許容列の追加はデータディクショナリの変更にすぎないため、テーブルロックは短時間しか保持されません(システムで処理できます)。

問題は、私ALTER TABLEがこれで失敗することが多いということです:

ORA-00054: resource busy and acquire with NOWAIT specified

私の現在のアプローチは、テーブルにロックがなくなるまで変更を実行して、変更をぶち壊すことです。つまり、SQL * Plusでこのようなスクリプトを完全に実行することはできませんが、各ステートメントをコピーして貼り付け、機能することを確認する必要があります。

もっと良い方法はありますか?

4

1 に答える 1

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;
于 2011-02-10T07:12:53.280 に答える