Oracle 对表中的记录进行大批量删除数量时,常常采用分批删除,逐次提交.其目的大概有三个原因:

Oracle 对表中的记录进行大批量删除数量时,常常采用分批删除,逐次提交.其目的大概有三个原因:

1.避免对其他事务select的影响

如果其他事务有需要查询这些要删除的记录,就需要去undo段查询前映像.分批逐次可以减少行更新的时间,以减少这种情况的发生.

2.避免各事务dml的锁等待

如果要删除的这些记录上,有其他事务在做dml操作,就可能会产生相互的行锁等待.分批逐次可以减少行锁定的时间,以减少这种情况的发生.

3.减少使用临时表空间对性能产生的影响

在关联删除时,可能会用到sort或hash区,一次对大量记录进行操作,如果sort_area_size或hash_area_size大小不够就会使用临时表空间,性能会降低.分批逐次可以减少单次操作的记录数,以减少这种情况的发生.

以下是一些对大批量删除进行分批删除逐次提交的代码,可根据自己的实际情况测试修改后实施.

--对无关联的单表中的记录按条件删除

declare

n_count number;

n_rownum number:=10000;

begin

select count(*) into n_count from tb_detail where createdate for i in 1..ceil(icount/irownum) loop

delete from tb_detail a

where createdate commit;

end loop;

end;

--对有关联的表按条件删除

declare

type ridArray is table of rowid index by binary_integer;

type dtArray is table of varchar2(50) index by binary_integer;

v_rowid ridArray;

v_fid_to_delete dtArray;

n_delete number;

n_rownum number:=10000;

begin

select count(*)

into n_delete

from tb_main

where createdate < to_date('20140101', 'yyyymmdd');

for i in 1 .. ceil(n_delete / n_rownum) loop

select fid, rowid BULK COLLECT

INTO v_fid_to_delete, v_rowid

from tb_main

where createdate < to_date('20140101', 'yyyymmdd')

and rownum <= n_rownum;

forall j in 1 .. v_fid_to_delete.COUNT

delete from tb_detail where fid = v_fid_to_delete(j);

forall k in 1 .. v_rowid.COUNT

delete from tb_main where rowid = v_rowid(k);

commit;

end loop;

end;

--对有关联的表按条件删除子表或主表

declare

type dtArray is table of varchar2(50) index by binary_integer;

v_fid_to_delete dtArray;

n_delete number;

n_rownum number := 10000;

begin

select fid BULK COLLECT

INTO v_fid_to_delete

from tb_main

where createdate < to_date('20140601', 'yyyymmdd');

for i in 1 .. ceil(v_fid_to_delete.COUNT / n_rownum) loop

forall j in (i - 1) * n_rownum + 1 .. least(i * n_rownum,v_fid_to_delete.COUNT)

delete from tb_detail where fid = v_fid_to_delete(j);

commit;

end loop;

end;

本文永久更新链接地址:,

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

oracle大表如何快速删除一列,Oracle 对表中的记录进行大批量删除相关推荐

  1. oracle 大表新增列 慢_Oracle DDL性能改进-大表新增列行为分析

    生产过程中常常会遇到对表需要在线增加列,尤其是新增带缺省值的非空列,例如: ALTER TABLE .. ADD COLUMN ( ... NOT NULL DEFAULT ... ) 在Oracle ...

  2. oracle 大表删除数据后,回收空间的问题。

    在oracle中由于表结构设计不合理或者需要清楚老数据的时候,经常需要对大表数据进行清理. 一般有一下几种方法: 1. 删除大部分数据,留下小部分数据.我们可以把需要保留的数据转移到别的表,然后再把大 ...

  3. ORACLE 大表使用 rowid 切片备份到历史表

    ORACLE 大表使用 rowid 切片备份到历史表 概述与要求 思路 备份与清理表的信息 方案 操作前准备 切分字段 备份步骤 清理步骤 脚本 概述与要求 项目需求将几个5000万行大表先备份到历史 ...

  4. oracle创建索引表,Oracle 大表创建索引

    Oracle 大表创建索引 祖仙教小凡仙 海鲨数据库架构师 有个2亿记录的表,发现需要添加一个联合索引,结果就采用普通的create index index_name on tablename (en ...

  5. Oracle大表清理truncate .. reuse storage

    Oracle大表清理truncate .. reuse storage deallocate_unused_clause Purpose Use the deallocate_unused_claus ...

  6. oracle超大表建索引,Oracle 大表创建索引

    有个2亿记录的表,发现需要添加一个联合索引,结果就采用普通的create index index_name on tablename (entp_id,sell_date),结果悲剧了,把所有的DML ...

  7. oracle变更为大表分区表,叶摇 » Blog Archive » oracle把没有分区的普通大表改成分区表...

    oracle把没有分区的普通大表改成分区表 1.根据要改成分区的表的结构创建一张一样结构的表: create table PARA_CELL_W_HIS_EXCHANGE ( START_TIME D ...

  8. Oracle 大表回表过滤优化案例

    某业务报表SQL: 执行时间3小时. asncn3a24zu67 SELECT NVL(XHSD0001.CG_F_GHSMC_TONGJI_SPBS_CGB(FHMX.SPBS), '0000000 ...

  9. oracle reuse storage,Oracle大表清算truncate . reuse storage

    最近需要清理一张大表,要求不能影响性能.在MySQL里边我们可以通过借助coreutils以及硬链接的方式来最小化I/O,Oracle也可以通过分批次回收空间来最小化I/O,到底如何,下面我们拭目以待 ...

最新文章

  1. Java飞行记录器 JRockit Flight Recorder JFR诊断JVM的历史性能和操作
  2. wpf窗口向左向上_PaperWM:GNOME 下的平铺窗口管理
  3. [导入]MsAjax Lib- Boolean.parse 函数
  4. {}是set类型还是dict类型呢
  5. keil生成hex文件找不到_骚操作!用Python把公众号文章打包成pdf文件,再也不怕找不到了...
  6. mybatis-plus学习记录(详细)
  7. java private 对象_[Java笔记]类的所有构造器都是private权限,就一定没有办法实例化它的对象了么?...
  8. wordpress在前台文章界面添加编辑按钮
  9. 用计算机弹歌我的歌声里,我的歌声里 (完整版)
  10. 如何学习Python进行数据分析
  11. c语言程序设计黄保和第二章,c语言程序设计答案(选择题+编程)黄保和、江戈版...
  12. 看懂Oracle的执行计划
  13. 想做出高级又好看的PPT,这9个技巧你别错过
  14. PDF文件加密解密-文件设置密码
  15. Three.js地球开发—6.三维球面上某点进行贴图标注
  16. Windows 小技巧10--Windows常见软件、系统配置
  17. 《数据结构与算法》课程设计:18-背包问题
  18. 究竟是什么人在买爱马仕?
  19. 解决嵌入百度导航4.1.x遇到的坑
  20. 源码时代UI干货分享|Axure基础教程

热门文章

  1. 互信息的数学解释以及matlab编程
  2. HR只在这些时间里看你的简历!
  3. 转: ashx中使用Session
  4. 构建linux根文件系统
  5. 基于UDP客户端服务器的编程模型-linux网络编程
  6. windows Docker Desktop 怎么改变最大内存
  7. 解析mediaTypes+viewResolvers+viewResolvers
  8. 操作系统(二)操作系统的四个特征
  9. STM32开发 -- Systick定时器
  10. c语言两个数组按位合并,合并两个线性表(数组)并按照非递减排序输出,有点问题过来看看...