Home > Database > Mysql Tutorial > 使用PL/SQL删除百万条记录的大表

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

WBOY
Release: 2016-06-07 16:46:38
Original
1233 people have browsed it

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

使用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  EXIT;
ELSE
 DBMS_LOCK.SLEEP(60);
END IF;
END LOOP;
 
DELETE FROM T_USER.T_TABLE_NAME WHERE mobile='13800138000' AND rownum 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

linux

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template