最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

Oracle数据库Delete删除千万以上普通堆表数据的方法

来源:动视网 责编:小采 时间:2020-11-09 15:14:13
文档

Oracle数据库Delete删除千万以上普通堆表数据的方法

Oracle数据库Delete删除千万以上普通堆表数据的方法:需求:Oracle数据库delete删除普通堆表千万条历史记录。 直接删除的影响: 1.可能由于undo表空间不足从而导致最终删除失败的问题 需求:Oracle数据库delete删除普通堆表千万条历史记录。 直接删除的影响: 1.可能由于undo表空间不足从而导致最终删除失
推荐度:
导读Oracle数据库Delete删除千万以上普通堆表数据的方法:需求:Oracle数据库delete删除普通堆表千万条历史记录。 直接删除的影响: 1.可能由于undo表空间不足从而导致最终删除失败的问题 需求:Oracle数据库delete删除普通堆表千万条历史记录。 直接删除的影响: 1.可能由于undo表空间不足从而导致最终删除失


需求:Oracle数据库delete删除普通堆表千万条历史记录。 直接删除的影响: 1.可能由于undo表空间不足从而导致最终删除失败的问题

需求: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;
begin
select 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)+1
loop
delete [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

两种方法的核心的思路都是把一个大事物拆分成了若干个小事物,无论采用哪种方法,,都建议先在对应的测试环境中测试后再考虑是否可以在实际生产使用。

顺便说一句,这样的大表应该要综合考虑下是否可以改造成分区表。

本文永久更新链接地址:

文档

Oracle数据库Delete删除千万以上普通堆表数据的方法

Oracle数据库Delete删除千万以上普通堆表数据的方法:需求:Oracle数据库delete删除普通堆表千万条历史记录。 直接删除的影响: 1.可能由于undo表空间不足从而导致最终删除失败的问题 需求:Oracle数据库delete删除普通堆表千万条历史记录。 直接删除的影响: 1.可能由于undo表空间不足从而导致最终删除失
推荐度:
标签: 删除 数据 数据库
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top