• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

使用PL/SQL删除百万条记录的大表

mysql 搞代码 4年前 (2022-01-09) 12次浏览 已收录 0个评论

使用PL/SQL删除百万条记录的大表,此脚本程序,通过利用dbms_output.sleep()过程,在删除过程中当需要归档的日志文件达到认定的限

使用PL/SQL删除百万条记录的大表:

最近开发人员对测试环境数据库进行了压力测试,数据库中产生本文来源gaodai#ma#com搞@代~码^网+了大量的脏数据。有几张大表里数据量均在百万甚至千万条的记录数。开发人员现提出需求如下:

只清理其中的部分脏数据,,不允许对这些表使用truncate操作。于是就有了下面的PL/SQL清理脚本:

1.编写删除数据表数据的脚本内容如下:

$ cat data_del.sql

set serveroutput on
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;
/

2.编写调用脚本:

$vim clear_dirt_data.sh

source ~/.bash_profile

@data_del.sql;

exit;

EOF

此脚本程序,通过利用dbms_output.sleep()过程,在删除过程中当需要归档的日志文件达到认定的限制时,使删除过程暂时停止,等待ARCH进程将日志文件归档后再继续进行,从而达到避免归档日志文件来不及归档,导致数据库挂起的问题。 此方法适用于Oracle的各个版本。

更多Oracle相关信息见Oracle 专题页面 ?tid=12


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:使用PL/SQL删除百万条记录的大表

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址