간격 파티션의 이름을 변경합니다. 테이블의 파티션 이름이 변경되는 절차가 있습니다. 테스트를 위해 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;
절차
코드입니다 스케줄러에 대한 코드?
: (간격 DATE 파티션에 대한 예) 다음과 같이
11g에서는이 시스템이 이름을 생성 해결하기 위해 절 "에 대한 파티션"를 사용할 수 있습니다 : 전형적인 쿼리는 뭔가 같은 것 내 생각 엔'alter table DEMO ... '는 업데이트 중이거나 "사용 중"이기 때문에 테이블에 대한 잠금을 얻을 수 없다. –
이것은 간격 파티션의 이름을 바꾸기위한 해킹입니까? – tbone
왜'T_FDC_TOOLCONTEXT' 테이블의 최대 파티션과'DEMO '테이블의 파티션 위치를 비교하고 있습니까? –