ITPub博客

首页 > 数据库 > > Oracle删除海量数据下避免Ora-01555快照过旧错误的执行脚本

Oracle删除海量数据下避免Ora-01555快照过旧错误的执行脚本

作者:flynike 时间:2019-09-06 16:48:57 0 删除 编辑

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;

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/2618/viewspace-3157861/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-07-26

  • 博文量
    205
  • 访问量
    9821