千家信息网

bulk批量删除数据

发表于:2024-11-25 作者:千家信息网编辑
千家信息网最后更新 2024年11月25日,bulk批量删除数据1. 案列介绍需要在一个1亿行的大表中,删除1千万行数据需求是在对数据库其他应用影响最小的情况下,以最快的速度完成如果业务无法停止的话,可以参考下列思路:根据ROWID分片、再利用
千家信息网最后更新 2024年11月25日bulk批量删除数据

bulk批量删除数据

1. 案列介绍

需要在一个1亿行的大表中,删除1千万行数据

需求是在对数据库其他应用影响最小的情况下,以最快的速度完成

如果业务无法停止的话,可以参考下列思路:

根据ROWID分片、再利用Rowid排序、批量处理、回表删除

在业务无法停止的时候,选择这种方式,的确是最好的

一般可以控制在每一万行以内提交一次,不会对回滚段造成太大压力

我在做大DML时,通常选择一两千行一提交

选择业务低峰时做,对应用也不至于有太大影响

2. 代码实现

测试环境

drop table t_emp purge;

create table t_emp as select * from emp;

insert into t_emp select * from t_emp;

insert into t_emp select * from t_emp;

insert into t_emp select * from t_emp;

insert into t_emp select * from t_emp;

insert into t_emp select * from t_emp;

insert into t_emp select * from t_emp;

insert into t_emp select * from t_emp;

insert into t_emp select * from t_emp;

insert into t_emp select * from t_emp;

insert into t_emp select * from t_emp;

insert into t_emp select * from t_emp;

commit;

具体代码

version 1.0

declare

cursor c_rowid is

select rowid from t_emp where deptno = 30 order by rowid; --data need to be deleted

type type_rowid is table of rowid index by pls_integer;

v_tab_rowid type_rowid;

v_num number := 0;

begin

open c_rowid;

loop

fetch c_rowid bulk collect

into v_tab_rowid limit 50;

--exit when c_rowid%notfound;

forall i in v_tab_rowid.first .. v_tab_rowid.last

delete from t_emp where rowid = v_tab_rowid(i);

commit;

v_num := v_num + v_tab_rowid.count;

exit when c_rowid%notfound;

endloop;

close c_rowid;

dbms_output.put_line(to_char(sysdate, 'yyyy-mm-dd:') || 'delete rows '||

to_char(v_num));

end;

/

version 2.0

declare

cursor c_rowid is

select rowid from t_emp where deptno = 30 order by rowid; --data need tobe deleted

type type_rowid is table of rowid index by pls_integer;

v_tab_rowid type_rowid;

v_num number := 0;

begin

open c_rowid;

loop

fetch c_rowid bulk collect

into v_tab_rowid limit 50;

exit when v_tab_rowid.count=0;

forall i in v_tab_rowid.first .. v_tab_rowid.last

delete from t_emp where rowid = v_tab_rowid(i);

commit;

v_num := v_num + v_tab_rowid.count;

endloop;

close c_rowid;

dbms_output.put_line(to_char(sysdate, 'yyyy-mm-dd:') || 'delete rows '||

to_char(v_num));

end;

/


数据 业务 选择 代码 应用 影响 最小 最快 压力 思路 情况 数据库 方式 时候 是在 最好 环境 速度 需求 参考 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 政府着力强化网络安全意识 游戏中如何开启连接服务器 浦东新区市场软件开发参考价 软件开发的可以去工厂 dhcp服务器释放地址命令 造价软件开发人工费 网络技术公司有几个部门 商城软件开发公司排名 软件开发过程中的分析阶段 旧版华东师范大学公共数据库 有关网络安全防护的诗句 怎么关闭数据库监听端口号 万方数据库明宝义 吉林物联网时钟监控网关服务器 上海十大软件开发公司 平板使用数据库 幼儿园网络安全示范校 德惠正规网络技术服务质量推荐 sql数据库信息查询 北京中超伟业软件开发 如何查看电脑有没有数据库 更改代理服务器设置lan设置 软件开发自学发展 青岛手机软件开发学校 如何利用数据库筛选关键蛋白 嘉兴数字化智慧工地软件开发 超凡先锋哪个服务器人机最多 达梦数据库如何sql 网络安全产品推荐目录 杭州市中奥网络技术有限公司
0