Я получаю странное поведение. У меня есть процедура, которая изменяет имена разделов в таблице. Я создал задание, которое выполняет эту процедуру каждые 2 минуты для тестирования. Первый запуск проходит очень гладко и без каких-либо ошибок. Однако, со 2-го запуска я получаю следующую ошибкуoracle scheduler для переименования интервальных разделов
"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;
Как я могу это исправить?
Я предполагаю, что «alter table DEMO ...» не может получить блокировку в таблице, потому что она обновляется или используется «в использовании». –
- это взломать переименование интервальных разделов? – tbone
Почему вы сравниваете максимальный раздел таблицы 'T_FDC_TOOLCONTEXT' с положением раздела таблицы' DEMO'? –