您的位置:首页 > 其它

delete大量数据时正确姿势(待测试)

2017-11-16 20:55 453 查看
参考:https://www.cnblogs.com/jyzhao/p/3879590.html

直接删除大量数据的影响:

1)可以由于undo表空间不足从而导致最终删除失败;

2)可以导致undo表空间过度使用,影响到其他用户正常操作;

改进方案:每删除1k行就提交一次。

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;

[del_cursor] 游标名
[table_name] 删除数据的表名

[time_stamp] 用作过滤条件的时间字段名称

PS:

是否能够关闭表的log功能

alter table table_name nologging;

alter table table_name logging;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: