0

私は奇妙な振る舞いをします。テーブル内のパーティションの名前を変更する手順があります。テストのために、この手順を 2 分ごとに実行するジョブを作成しました。最初の実行は非常にスムーズで、これまでのところエラーはありません。ただし、2回目の実行から、次のエラーが発生します

"ORA-00054: resource busy and acquire with NOWAIT  specified or timeout expired
       ORA-06512: at "CDS_USER.RENAMING_PARTITIONS", line 17"

はい、私のテーブルはライブです。しかし、スケジューラを使用せずにプロシージャを明示的に実行すると、完全に正常に実行されます。問題ありません。また、スケジューラによる最初の実行もすべて完璧です。

これがスケジューラのコードです

    begin
    bms_Scheduler.create_job(
    job_name => 'drop_user1' ,
    job_action => 'RENAMING_PARTITIONS' 
    job_action => 'DROP_PARTITIONS' 
    ,start_date => SYSDATE ,
     repeat_interval => 'freq=hourly;INTERVAL=7',bysecond=0;' ,
     enabled => TRUE ,
     comments => 'schduling drop job.');
     END; 

ここに手順のコードがあります

     create or replace PROCEDURE RENAMING_PARTITIONS
   AS
   hv varchar2(9);
   max_part VARCHAR2(9);
   begin
   select  max(partition_position)  into max_part from user_tab_partitions where  table_name='DEMO'; 
  for x in (select partition_name, high_value, partition_position
          from user_tab_partitions
          where table_name = 'DEMO' and partition_name  like 'SYS%')
 loop
 if x.partition_position  <> max_part THEN

       execute immediate 'select to_char('||x.high_value||'-1,''YYYYMMDD'') from dual' into hv;
partition '||x.partition_name
                   --||' to DATE_'||hv);
       execute immediate('alter table DEMO rename partition '||x.partition_name
                  ||' to DATE_'||hv);   
end if;
end loop;   
 end;

どうすればこれを修正できますか?

4

1 に答える 1