Oracle库Delete删除千万以上普通堆表数据的方法
需求: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中如何删除某个用户下的所有数据的方法
win+R打开cmd 使用dba身份登录: sqlplus sys/sys@orcl as sysdba; 然后使用dba身份删除某个用户: drop user apptdm_9y cascade;
- Oracle数据库delete删除普通堆表千万条记录
Oracle数据库delete删除普通堆表千万条历史记录. 直接删除的影响: 1.可能由于undo表空间不足从而导致最终删除失败的问题: 2.可能导致undo表空间过度使用,影响到其他用户正常操作. ...
- Oracle 分区表的新增、修改、删除、合并。普通表转分区表方法
一. 分区表理论知识 Oracle提供了分区技术以支持VLDB(Very Large DataBase).分区表通过对分区列的判断,把分区列不同的记录,放到不同的分区中.分区完全对应用透明. Orac ...
- oracle存储过程删除树状结构的表数据
今天在删除一个车辆品牌表的时候,遇到了一个问题,是在java的代码中做逻辑删除还是直接在Oracle中一次删除完成呢 思来想去觉得还是在sql里直接删除比较合适, 为什么呢? 第一,涉及数据库的读写操 ...
- oracle_分区表的新增、修改、删除、合并。普通表转分区表方法
一. 分区表理论知识Oracle提供了分区技术以支持VLDB(Very Large DataBase).分区表通过对分区列的判断,把分区列不同的记录,放到不同的分区中.分区完全对应用透明. Oracl ...
- Oracle清空数据库中数据表数据的方法
一.简介最近在项目发版测试的时候,导出dmp的时候不小心把开发库中的一些脏数据导出来了,测试那边导入进去之后一堆不规范的数据,为了不影响测试结果,于是总结了一个快速清空数据库数据表所有数据的方法. 二 ...
- MySQL删除语句比较,清空表数据,重置自增长索引
drop truncate delete 程度从强到弱 1.drop table tbdrop将表格直接删除,没有办法找回 2.truncate (table) tbtruncate 删除表中的所有数 ...
- Oracle和sql server中复制表结构和表数据的sql语句
在Oracle和sql server中,如何从一个已知的旧表,来复制新生成一个新的表,如果要复制旧表结构和表数据,对应的sql语句该如何写呢?刚好阿堂这两天用到了,就顺便把它收集汇总一下,供朋友们参考 ...
- Oracle一个用户查询另一个用户的表数据
1.两个用户是在不同的库,需要建立dblink 2.属于同一个库的不同用户 1)方法一:使用"用户名."的方式访问 例如:要从USER1账号访问USER2中的表TABLE2 A. ...
随机推荐
- <十二>JDBC_批量处理
import java.sql.Connection;import java.sql.PreparedStatement;import org.junit.Test;import com.kk.jdb ...
- Maven打包 报 Unable to locate the Javac Compiler in: C:\Program Files\Java\jre1.8.0_73\..\lib\tools.jar
无法找到javac 编译环境 右键项目 --> properties -->Java Build Path -->选中JRE 点击右侧 Edit 编辑 --> 把你设置的JRE ...
- ZK 样式使用
控件: <textbox id="usernameTb" sclass="login-user-input" placeholder="账号&q ...
- CentOS6.5安装中文输入法
首先进入命令形式的客户端 切换成root用户,输入命令"su root"即可,接着输入 yum install "@Chinese Support" 命令按en ...
- MySQL5.6 GTID新特性实践
MySQL5.6 GTID新特性实践 GTID简介 搭建 实验一:如果slave所需要事务对应的GTID在master上已经被purge了 实验二:忽略purged的部分,强行同步 本文将简单介绍基于 ...
- Android应用性能优化(转)
人类大脑与眼睛对一个画面的连贯性感知其实是有一个界限的,譬如我们看电影会觉得画面很自然连贯(帧率为24fps),用手机当然也需要感知屏幕操作的连贯性(尤其是动画过度),所以Android索性就把达到这 ...
- Linux上传下载文件快捷命令
远程链接Linux(如SecrueCRT),要上传文件很下载文件到Linux服务器,只需要使用sz或者rz命令即可快速下载和上传文件了. 使用方法: 1.首先确保Linux服务器系统中安装了lrzsz ...
- nginx 软连接
ln -s 目标地址 源地址 ln -s ../../../web-admin/etc/nginx-location.conf web-admin.conf
- Finger Trees: A Simple General-purpose Data Structure
http://staff.city.ac.uk/~ross/papers/FingerTree.html Summary We present 2-3 finger trees, a function ...
- UI控件(UIPickerView)
@implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; _item1 = [[NSArray alloc]i ...