暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
delete大量删除表数据及释放空间操作流程.docx
284
4页
9次
2023-08-03
5墨值下载
1
先建立测试数据
create bigle tablespace aa1 datale '/u01/app/oracle/oradata/orcl/t1.dbf'
size 1g autoextend on next 1g maxsize 1000g;
create table a01b(
n number,
id char(200),
id1 char(200),
id2 char(200),
id3 char(200),
id4 char(200),
id5 char(200),
id6 char(200),
id7 char(200),
id8 char(200),
create_date date) tablespace aa1;
declare i number;
begin
i := 10000000;
while i> loop
insert into a01b
values(i,TO_CHAR('8.02'+i),TO_CHAR('9'+i),TO_CHAR('3.05'+i),TO_CHAR('6.32
'+i),TO_CHAR('41.221'+i),TO_CHAR('4.0347'+i),TO_CHAR('3.1269'+i),TO_CHA
R('2.70764'+i),TO_CHAR('1.24785'+i) ,to_date('2020-12-31','YYYY-MM-DD'));
commit;
i := i-1;
end loop;
end;
/
修改时间再插入若干次,总共插入了
300W
条数据
SQL> select count(*) from a01b;
COUNT(*)
----------
3000000
2
删除
可以考虑每
1W
条删一次,并注意脚本中的时间,根据实际情况来调整
方法一:
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('2021-01-01','yyyy-mm-dd') then
delete from [table_name] where rowid = v_cusor.row_id;
end if;
if mod([del_cursor]%rowcount,10000)=0 then
commit;
end if;
end loop;
commit;
end;
/
变量说明:
[del_cursor]
游标名
[table_name]
你要删除数据的表名
[time_stamp]
你用作过滤条件的表的时间字段名称
方法二:
declare
maxrows number default 10000;
delete_ct number default 0;
begin
select count(1)/maxrows into delete_ct from [table_name] where
[time_stamp] < to_date('2017-01-01','yyyy-mm-dd');
for i in 1..TRUNC(delete_ct)+1
loop
delete [table_name] where [time_stamp] < to_date('2021-01-01','yyyy-mm-
dd') and rownum <= maxrows;
commit;
end loop ;
of 4
5墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文档被以下合辑收录

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜