1.将某大表的数据保留周期减少至90天内,但因此表数据量十分庞大,故此使用该方法处理,提高删除数据的性能以及避免Ora-01555快照过旧的问题
DECLARE
CNT NUMBER(10):=0;
I NUMBER(10);
BEGIN
SELECT COUNT(*) INTO CNT FROM [Your_table_name] t
where t.printdate < sysdate - 90 ;
FOR I IN 1..TRUNC(CNT/1000)+1
LOOP
DELETE FROM [Your_table_name] t where t.printdate < sysdate - 90 AND ROWNUM<=1000;
COMMIT;
END LOOP;
END;
2.最经经常发现数据库底层在使用同步数据时报ora-01555的错误,改使用轮询的方式查询需求表半小时内的数据再进行一次插入提交,避免大量数据一次性插入导致数据同步不成功:
declare
vScanDate date;
begin
vScanDate := trunc(sysdate - 4);
for i in 0 .. 47 loop
insert into [Your_table_name]
select * from [Your_table_name]@remote t
where t.[Date_col] >= vScanDate + i * 30 / 60 / 24
and t.[Date_col] <= vScanDate + 30 / 60 / 24 + i * 30 / 60 / 24 - 1 / 24 / 3600;
commit;
end loop;
end;
阅读(2070) | 评论(0) | 转发(0) |