标签:tab cursor rom int bsp 分区 div where 表数
Oracle性能分析
软件环境:Oracle 11g , 双机RAC.
问题:
大表(千万级行记录)查询、操作慢,经常超时终端(ORA-01013: 用户请求取消当前的操作)
分析:
1)分区表
2)历史数据归档
解决:
采用方案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;
标签:tab cursor rom int bsp 分区 div where 表数
原文地址:http://www.cnblogs.com/lfwolf/p/7740080.html