ITPub博客

首页 > 数据库 > Oracle > 用bulk 实现超快迁移审计表AUD$数据过程一个

用bulk 实现超快迁移审计表AUD$数据过程一个

原创 Oracle 作者:darren__chan 时间:2016-01-14 11:34:07 0 删除 编辑

之前给客户写了个清理审计表的方案,发现从aud$取数时采用了bulk,速度快了很多,分享下代码:                                                                                                                      

   CREATE OR REPLACE PROCEDURE "SYS"."ARCHIVE_AUDIT"
as
        v_begintime date;
        v_curtime date;
        v_size BINARY_FLOAT;
BEGIN
        select sysdate into v_begintime from dual;
declare     
CURSOR cur IS
SELECT/*+parallel(a,8) */ * FROM sys.aud$ a WHERE NTIMESTAMP# < v_begintime;
TYPE rec IS TABLE OF sys.aud$%ROWTYPE; 
recs rec;
BEGIN
OPEN cur;
WHILE (TRUE) LOOP
  FETCH cur BULK COLLECT
  INTO recs LIMIT 10000;
  FORALL i IN 1 .. recs.COUNT
 INSERT INTO ORA_MON.DBA_AUDIT_TRAIL_HIST VALUES  recs (i);
  COMMIT;
  select sysdate into v_curtime from dual;
  EXIT WHEN cur%NOTFOUND or (v_curtime > v_begintime+2/24);
  END LOOP;
            execute immediate 'truncate table SYS.AUD$';
    CLOSE cur;
    end;
   SELECT round(BYTES/1024/1024,0) INTO v_size FROM DBA_SEGMENTS WHERE SEGMENT_NAME='AUD$' AND OWNER='SYS';
        if v_size>=50 then
          begin
            execute immediate 'truncate table SYS.AUD$';
          exception
            when others then
               null;
          end;
        end if;
END;

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

请登录后发表评论 登录
全部评论
学习需要精细化

注册时间:2014-09-09

  • 博文量
    134
  • 访问量
    994903