码迷,mamicode.com
首页 > 数据库 > 详细

oracle性能分析2

时间:2017-10-27 01:40:11      阅读:264      评论:0      收藏:0      [点我收藏+]

标签:tab   cursor   rom   int   bsp   分区   div   where   表数   

Oracle性能分析

软件环境:Oracle 11g , 双机RAC.

问题: 

大表(千万级行记录)查询、操作慢,经常超时终端(ORA-01013: 用户请求取消当前的操作)

分析:

1)分区表

2)历史数据归档

解决:

采用方案2)。

  1. 创建历史表、
  2. create table {tablename}_his as select * from {tablename} where ...

    删除表数据。数据量太大(7444741)无法直接删除,需批量删除。

    declare  
       cursor mycursor is SELECT  ROWID FROM {tablename} WHERE ltl_time < to_date(2017-08-01,YYYY-mm-dd) order by rowid;   --------按ROWID排序的Cursor,删除条件是XXX=XXXX,根据实际情况来定。
       type rowid_table_type is  table  of rowid index by pls_integer;
       v_rowid   rowid_table_type;
    BEGIN
       open mycursor;
       loop
         fetch   mycursor bulk collect into v_rowid  limit 5000;   --------每次处理5000行,也就是每5000行一提交
         exit when v_rowid.count=0;
         forall i in v_rowid.first..v_rowid.last
            delete from {tablename} nologging  where rowid=v_rowid(i);
         commit;
       end loop;
       close mycursor;
    END;

     

oracle性能分析2

标签:tab   cursor   rom   int   bsp   分区   div   where   表数   

原文地址:http://www.cnblogs.com/lfwolf/p/7740080.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!