接着上一篇文章:
一亿行删除或修改一千万行的思路
思路二: CTAS + RENAME
因为要在对数据库及其他应用影响最小的情况下做
如果直接对表进行删除则会出现应用因为等待数据释放锁而等待
而且常规的DELETE语句,会生成大量的UNDO和REDO
而且表上如果有大量索引的话,导致删除还会更慢
而且可能会造成大量的空数据块,如果有扫描大量行的操作,空块太多,也会导致性能下降
如果可以停止业务,防止对此表的更新
那么CTAS + RENAME也是个不赖的选择
这种方法只适用于没有业务发生的情况,对于大多数OLTP系统还是不适用的
由于CTAS是DDL语句,基本没有太多UNDO的生成,如果CTAS失败了,重新在执行一遍即可
大致过程如下
比如:对象表为test_01,我想要删去日期(deal_date)为20120301的数据
① CTAS的方法创建一个新表,建表条件为删除条件的对立条件,可考虑nologging+并行
例如:create table test_02 as select * from test_01 where deal_Date<>'20120301'
② 在新表上建立相关索引和约束
③ 重命名新表为老表名字
例如:ALTER TABLE test_02 RENAME TO test_01
④ 如果没问题 删除老表
⑤ 最后查看和该表相关的存储过程、函数等,重新编译
如果用CTAS在建表的时候会对原表建立一致性读的
如果这时候对原表有插入或更新,就需要访问undo表空间然后完成一致读
而且一旦失败需要全部回滚,数据量这么大,这样做的风险是巨大的
我们可以访问dba_extents视图,通过rowid将原表划分成许多不重叠的区域
然后起多个job,job中通过rowid访问然后删除数据
删除完后的区域写日志,这样即使中途失败通过划分的rowid区域和日志都是可以重启的
而且速度要比bulkcollect好,因为bulk collect是缓存100到200条一delete,一个区域直接一个delete
但是这种方式最好需要先在表上加读取锁,不然有insert和update会破坏原来的rowid划分
这种通过rowid的思路,我会在下一篇博客继续介绍
未完待续.....
分享到:
相关推荐
要在一个1亿行的大表中,删除1千万行数据,在对数据库其他应用影响小的情况下,以快的速度完成,那么操作期间应该注意什么?如果中途中断了,有木有方法再继续?如果应用不可停,又该怎么办呢? 删除了10分之一...
代码如下: /**********************************...Description: 文件操作:读取指定行,删除指定行,修改指定行 ********************************************************/ #include #include #include <string>
shell 删除指定行上一行
用qt 实现删除文本文件中一行,deleteonelineinfile(int nNumLine, QString & filename);输入文件名和删除的行号可以删除。行号是0到行数减一。
qt c++ 文件 删除一行 删除指定行 可以删除指定文件中的指定行
下面小编就为大家带来一篇利用jquery给指定的table动态添加一行、删除一行的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
QSettings有时候不好用,所以用QFile写了个读写ini文件的模块 Qt 基于QFile 读写ini文件(包含QFile读取行,修改行数据,删除行数据)
本效果带tab切换效果。...js实现自动添加删除一行。添加删除时序号自动改变。每一行后面有添加一行按钮,点击时自动在点击行的下面添加一行。新添加行有文本框,文本框输入值失去焦点后自动变为输入的值。
java swing tableModel添加行修改行删除行 基础篇 我根据课程慢慢上传的 适合初学者 实用的好东西 大家快来呀!!!
易语言编辑框内容满删除第一行源码,编辑框内容满删除第一行,取编辑框满行
1.方便获得一个字符串表示的矩阵 2.删除二维数组中的第几行 3.删除二维数组中与所要删除行内容一样的此行 4.获得此二维数组
可以删除文档中重复的内容,只要是一行一行的,包括词表中重复的词、词组或短语等,以及文章中重复的词、词组、短语、句子、段落等。在 .txt 中操作。
table JS 添加行和删除行 实现JS添加table的一行和删除一行技术
JavaScript删除一行代码,删除一行表格
jsp修改 删除表格的某一行数据.docx
jquery动态添加删除行 点击按钮动态添加行或动态删除行代码 删除后序号重新排列
本软件显示地打开WORD程序本身,然后由本程序刺入WORD程序内,逐行判断是否是没有有效文字的空白行,如果是,将此行删除,直到每一个文档的最后。 本软件可批量的执行一个文件夹下所有的WORD文档的检查删除工作。 ...
Jquery实现表格动态增加一行,删除一行(最简洁的代码实现)
最后一行 删除, 可批量删除
HTML TABLE批量添加行与删除行.javascript实现。