使用PL/SQL删除百万条记录的大表
使用PL/SQL删除百万条记录的大表:
最近开发人员对测试环境数据库进行了压力测试,数据库中产生了大量的脏数据。有几张大表里数据量均在百万甚至千万条的记录数。开发人员现提出需求如下:
只清理其中的部分脏数据,不允许对这些表使用truncate操作。于是就有了下面的PL/SQL清理脚本:
1.编写删除数据表数据的脚本内容如下:
show serveroutput
DECLARE
V_LOGNUM NUMBER;
V_NEEDARC NUMBER;
BEGIN
SELECT count(1) INTO V_LOGNUM FROM V$LOG;
LOOP
LOOP
SELECT count(1) INTO V_NEEDARC FROM V$ARCHIVE;
IF V_NEEDARC < V_LOGNUM - 1 THEN
EXIT;
ELSE
DBMS_LOCK.SLEEP(60);
END IF;
END LOOP;
DELETE FROM T_USER.T_TABLE_NAME WHERE mobile='13800138000' AND rownum < 100;
IF SQL%ROWCOUNT = 0 THEN
EXIT;
END IF;
COMMIT;
END LOOP;
END;
/
此脚本程序,通过利用dbms_output.sleep()过程,在删除过程中当需要归档的日志文件达到认定的限制时,使删除过程暂时停止,等待ARCH进程将日志文件归档后再继续进行,从而达到避免归档日志文件来不及归档,导致数据库挂起的问题。 此方法适用于Oracle的各个版本。
使用PL/SQL删除百万条记录的大表的更多相关文章
- mysql删除一条记录
mysql如何删除一条记录 delete from 表名 where 条件 实例: use db1 delete from tb1 where id = 1;
- easyui的datagrid删除一条记录后更新出问题
1.问题 如果先删除一条记录,然后不选中一条记录,去更新一条,默认是有选中的记录的,就是被删除的那条记录. 2.解决方法 $("#dg").datagrid('uncheckAll ...
- 解决EasyUi中的DataGrid删除一条记录后,被删除的数据仍处于被选中状态问题
项目中遇到这么一个问题,在easyui的datagrid中,删除一条记录成功,重新加载datagrid后,去点编辑操作,仍可把之前删除掉的那条记录进行编辑操作,正常情况应该是,删除后再去点击“编辑”, ...
- ThinkPHP与EasyUI整合之二(datagrid):删除多条记录
学习EasyUI已有一段时间了,现在开始逐步把平时学习的细节和难点记录下来. 1. datagrid选中多条记录的语句是: var rows = $('#dg').datagrid('getSelec ...
- Mysql复制一条或多条记录并插入表|mysql从某表复制一条记录到另一张表
Mysql复制一条或多条记录并插入表|mysql从某表复制一条记录到另一张表 一.复制表里面的一条记录并插入表里面 ① insert into article(title,keywords,de ...
- PL/SQL 删除主键 ORA-02443: 无法删除约束条件-不存在的约束条件
在PL/SQL developer中删除一个表的主键,然后把另外一个字段设置成主键,删除的过程中报错:ORA-02443 我遇到这个问题出现的背景是: alter table saleqtya dro ...
- PL/SQL学习笔记之记录
一:记录 记录是一种高可以容纳不同数据类型的数据的数据结构. PL/SQL可以处理记录的以下几种类型: 基于数据表 基于游标的记录 用户自定义的记录 二:使用 %ROWTYPE属性 创建基于表格或基于 ...
- mysql支持跨表删除多条记录
在Mysql4.0之后,mysql开始支持跨表delete. Mysql可以在一个sql语句中同时删除多表记录,也可以根据多个表之间的关系来删除某一个表中的记录. 假定我们有两张表:Product表和 ...
- mysql跨表删除多条记录
Mysql可以在一个sql语句中同时删除多表记录,也可以根据多个表之间的关系来删除某一个表中的记录. 假定我们有两张表:Product表和ProductPrice表.前者存在Product的基本信息, ...
随机推荐
- internet访问局域网内部方法之----------路由器端口映射
很多人每天都问为什么要端口映射?例如:通过路由器上网的,网站自己可以访问,但是别人就不能:输入127.0.0.1可以访问,别人还是看不到:输入localhost可以看到,但是别人就是看不到,气人啊-没 ...
- codeforces 622A Infinite Sequence
A. Infinite Sequence time limit per test 1 second memory limit per test 256 megabytes input standard ...
- 修改eclipse默认编码方式
设置js文件的默认编码格式为UTF-8 在Windows->Preference页面中,选择General->Content Types ...
- c++结束进程的程序
//#include <winbase.h> #include <windows.h> #include <process.h> #include <Tlhe ...
- poj3687
Labeling Balls Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9028 Accepted: 2444 De ...
- Elasticsearch和mysql数据同步(logstash)
1.版本介绍 Elasticsearch: https://www.elastic.co/products/elasticsearch 版本:2.4.0 Logstash: https://www ...
- HttpWebRequest和HttpWebResponse用法小结
http://www.cnblogs.com/willpan/archive/2011/09/26/2176475.html http://www.cnblogs.com/lip0121/p/4539 ...
- [GUI]界面开发类库
如果我们不十分清楚需要什么样的界面风格及如何实现,请按以下两个步骤操作: (1) 搞清楚这种风格叫什么名字 (2) 查现有的比较著名的GUI库是否已有相应的实现方案. (3) ...
- 插入三层treeview代码
#region treetView加载 private void treeViewLoad() { DataView dv = navds.tbSiteKind.AsDataView(); treeV ...
- [转载代码]VB.NET 中查询 Linq to SQL 执行时的SQL语句
在搜索使用LINQ TO SQL 添加数据后获得自增长ID的方法时,发现C#可以使用DebuggerWritter把使用Linq to SQL执行的SQL语句显示到即时窗口,于是在网上搜索到在VB.N ...