私は奇妙な振る舞いをします。テーブル内のパーティションの名前を変更する手順があります。テストのために、この手順を 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;
どうすればこれを修正できますか?