Chinaunix首页 | 论坛 | 博客
  • 博客访问: 184503
  • 博文数量: 46
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 490
  • 用 户 组: 普通用户
  • 注册时间: 2017-03-26 14:22
个人简介

做最Low逼的DBA

文章分类

全部博文(46)

文章存档

2017年(46)

我的朋友

分类: Oracle

2017-04-19 22:32:08

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) |
给主人留下些什么吧!~~