Oracle库Delete删除千万以上普通堆表数据的方法
来源:互联网 发布:广联达软件配置要求 编辑:程序博客网 时间:2024/05/17 06:50
Oracle库Delete删除千万以上普通堆表数据的方法
http://www.cnblogs.com/jyzhao/p/3879590.html
需求:Oracle数据库delete删除普通堆表千万条历史记录。
直接删除的影响:
1.可能由于undo表空间不足从而导致最终删除失败的问题;
2.可能导致undo表空间过度使用,影响到其他用户正常操作。
改进方案:每删除1k行就提交一次。(这样就把一个大事物拆分成了若干个小事物)
注意:下面方法以删除2014年之前的所有记录为例,请根据你的实际情况修改,防止误操作。
方法1
declare cursor [del_cursor] is select a.*, a.rowid row_id from [table_name] a order by a.rowid;begin for v_cusor in [del_cursor] loop if v_cusor.[time_stamp] < to_date('2014-01-01','yyyy-mm-dd') then delete from [table_name] where rowid = v_cusor.row_id; end if; if mod([del_cursor]%rowcount,1000)=0 then commit; end if; end loop; commit;end;
方法1中变量说明:
[del_cursor] 游标名[table_name] 你要删除数据的表名[time_stamp] 你用作过滤条件的表的时间字段名称
方法2
declare maxrows number default 1000;delete_ct number default 0;beginselect count(1)/maxrows into delete_ct from [table_name] where [time_stamp] < to_date('2014-01-01','yyyy-mm-dd');for i in 1..TRUNC(delete_ct)+1loopdelete [table_name] where [time_stamp] < to_date('2014-01-01','yyyy-mm-dd') and rownum <= maxrows;commit;end loop ;end;
方法2中变量说明:
[table_name] 你要删除数据的表名[time_stamp] 你用作过滤条件的表的时间字段名称
Note
两种方法的核心的思路都是把一个大事物拆分成了若干个小事物,无论采用哪种方法,都建议先在对应的测试环境中测试后再考虑是否可以在实际生产使用。
顺便说一句,这样的大表应该要综合考虑下是否可以改造成分区表。
AlfredZhao©版权所有「从Oracle起航,领略精彩的IT技术。」
0 0
- Oracle库Delete删除千万以上普通堆表数据的方法
- oracle数据库delete删除数据恢复的方法
- Mysql 千万以上数据优化方法
- oracle总delete删除数据的恢复
- 如何处理千万级以上的数据
- oracle delete部分数据的恢复方法
- 处理千万级以上的数据提高查询速度的方法
- 处理千万级以上的数据提高查询速度的方法 ...
- 处理千万级以上的数据提高查询速度的方法(转)
- 处理千万级以上的数据提高查询速度的方法(转)
- 处理千万级以上的数据提高查询速度的方法(转)
- 处理千万级以上的数据提高查询速度的方法(转)
- Mysql 千万以上数据优化方法(一,SQL优化)
- Oracle数据被删除(delete,drop)之后的恢复方式
- oracle delete删除数据以后 恢复数据
- Oracle 分区表的新增、修改、删除、合并。普通表转分区表方法
- Oracle 分区表的新增、修改、删除、合并。普通表转分区表方法
- Oracle 分区表的新增、修改、删除、合并。普通表转分区表方法
- Android初学习 - 明暗度,窗体透明等的设置技巧
- poj 3414 Pots(BFS)(简单题)
- Monkey log异常分析说明
- CodeForces 546A Soldier and Bananas
- The sizeof Operator
- Oracle库Delete删除千万以上普通堆表数据的方法
- opencv中各种矩阵乘的区别
- display属性
- java快速排序实现
- Android中的UI更新
- 获得二叉树中两个节点的所有公共祖先
- synergy使用配置<Server window7 Client Fedora21>
- [Objective-C]-02-set get语法.类方法.self关键字与点语法
- HDU 1086You can Solve a Geometry Problem too(判断线段相交模板题)