Welcome 微信登录

首页 / 数据库 / MySQL / 使用PL/SQL删除百万条记录的大表

使用PL/SQL删除百万条记录的大表:最近开发人员对测试环境数据库进行了压力测试,数据库中产生了大量的脏数据。有几张大表里数据量均在百万甚至千万条的记录数。开发人员现提出需求如下:只清理其中的部分脏数据,不允许对这些表使用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.shsource ~/.bash_profilesqlplus -s mytest/passwd@mydb <<EOF@data_del.sql;exit;EOF此脚本程序,通过利用dbms_output.sleep()过程,在删除过程中当需要归档的日志文件达到认定的限制时,使删除过程暂时停止,等待ARCH进程将日志文件归档后再继续进行,从而达到避免归档日志文件来不及归档,导致数据库挂起的问题。 此方法适用于Oracle的各个版本。更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12Oracle RAC之--安装过程中碰到的问题及解决方法创建表,提示ORA-00959: 表空间 "MC_DATA" 不存在相关资讯      oracle数据库教程 
  • Oracle raw数据类型介绍  (01/29/2013 10:05:53)
  • 监听器注册与ORA-12514 错误分析  (11/13/2012 14:30:08)
  • Oracle SQL的cursor理解  (11/13/2012 14:16:17)
  • Oracle 如何强制刷新Buffer Cache  (01/29/2013 10:02:46)
  • dblink致Oracle库的SCN变成两库的  (11/13/2012 14:24:41)
  • Linux操作系统下完全删除Oracle数  (11/13/2012 08:25:52)
本文评论 查看全部评论 (0)
表情: 姓名: 字数
<