oracle删除大数据方法

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: 1、使用TRUNCATE命令进行删除。 如果是整个表的数据都要删除的话,使用TRUNCATE TABLE命令是理想的选择。它删除了表中的所有数据,并且因为不写REDO LOG FILE,所以速度很快。
1、使用TRUNCATE命令进行删除。 
如果是整个表的数据都要删除的话,使用TRUNCATE TABLE命令是理想的选择。它删除了表中的所有数据,并且因为不写REDO LOG FILE,所以速度很快。删除的同时,表的索引和约束条件仍然存在。这种方法适用于ORACLE的各个版本。但是当要删除的数据只是表中的一部分时,这种方法便行不通了。 


2、直接进行DELETE操作。 
直接使用DELETE命令进行删除,如果删除的数据量较大时,可能导致回滚段出错。这是因为在删除数据的过程中,不断扩展回滚段,直到回滚段的最大范围数
或回滚段所在表空间空闲空间用完而出错。解决这个问题可以通过给删除数据的事务指定一个足够大的回滚段或者将回滚段所在表空间的AUTOEXTEND选项打开,同时将回滚段的MAXEXTENTS改大或设为UNLIMITED。不过这样仍存在一个隐患,如果删除的数据量大,同时数据库工作于归档模式下时,有可能导致日志切换频繁,所有日志文件都处于需要归档的状况,而归档进程来不及归档日志文件的情况出现,这时数据库将被挂起,直到有可用的日志文件后才恢复正常。 

所以这种方法也不理想。 

3、通过PL/SQL循环分段删除。 
第三种方法是专门针对上面第二种方法进行优化改进的。这种方法通过一段PL/SQL程序循环分段删除数据,逐步提交事务,达到缩小事务规模,安全删除数据的目的。 
例如有一个数据表t_table,我们将对其中字段c_date满足小于2001年1月1日的记录进行删除,可以采用以下的PL/SQL程序。 


1 DECLARE 
2 V_TEMP NUMBER; 
3 BEGIN 
4 LOOP 
5 BEGIN 
6 SELECT 1 INTO V_TEMP FROM t_table WHERE c_date < to_date(2000/01/01,yyyy/mm/dd) AND rownum = 1; 
7 DELETE FROM t_table WHERE c_date < to_date(2000/01/01,yyyy/mm/dd) AND rownum < 100; 
8 COMMIT; 
9 EXCEPTION 
10 WHEN NO_DATA_FOUND THEN 
11 EXIT; 
12 END; 
13 END LOOP; 
14 END; 


程序的第1和第2行声明了一个临时变量。第4到第13行定义了一个循环,在这个循环中第6行不断检查表中是否还有满足条件的记录,如果有,第7行程序便执行删除操作,每次删除100记录,同时提交事务。当表中已无满足条件的记录时,便引起NO_DATA_FOUND的异常,从而退出循环。通过分批删除,逐步提交,缩小了事务的规模,从而达到避免出现回滚段错误的目的。然而这种方法依然存在因日志切换频繁,而归档进程来不及归档日志文件而导致数据库挂起的可能性。下面的程序通过ORACLE所提供的dbms_lock包中的过程sleep,解决了这个问题,从而达到安全快速大量删除数据的目的。


1 DECLARE 
2 V_LOGNUM NUMBER; -- 数据库中拥有的日志文件数 
3 V_NEEDARC NUMBER; -- 需要归档的日志文件数 
4 BEGIN 
5 SELECT count(1) INTO V_LOGNUM FROM V$LOG; 
6 LOOP 
7 LOOP 
8 SELECT count(1) INTO V_NEEDARC FROM V$ARCHIVE; 
9 IF V_NEEDARC < V_LOGNUM - 1 THEN 
10 EXIT; 
11 ELSE 
12 DBMS_LOCK.SLEEP(60); 
13 END IF; 
14 END LOOP; 
15 
16 DELETE FROM t_table WHERE c_date < to_date(2000/01/01,yyyy/mm/dd) AND rownum < 100; 
17 IF SQL%ROWCOUNT = 0 THEN 
18 EXIT; 
19 END IF; 
20 COMMIT; 
21 END LOOP; 
22 END; 
程序中的第2和第3行声明了两个变量v_lognum和v_needarc来保存数据库中日志文件的数量和当前需要归档的日志文件数量。 
第5行获取了数据库中日志文件的数量。 
第6行到第21行开始了删除数据的循环,第7行到第14行是一个子循环,不断检测当前需要归档的日志文件的数量v_needarc是否小于数据库的日志文件总数v_lognum减去1,如果满足条件,则退出子循环,开始删除数据。否则的话便调用dbms_lock.sleep()过程,使程序休眠60秒,然后继续子循环,检测需归档的日志文件数量。 
第17到19行,检查删除数据的结果,如果已无数据,则退出,程序结束。 
这个程序,通过利用dbms_output.sleep()过程,在删除过程中当需要归档的日志文件达到认定的限制时,使删除过程暂时停止,等待ARCH进程将日志文件归档后再继续进行,从而达到避免归档日志文件来不及归档,导致数据库挂起的问题。 
此方法适用于oracle的各个版本。 


4、使用NOLOGGING选项重新建表。 
在ORACLE 8以后的版本中,CREATE TABLE命令提供了NOLOGGING的选项,在建表时不用写日志文件。 
这样当我们在删除大量的数据时可以将要保留的数据通过CREATE TABLE ... NOLOGGING ... AS SELECT * FROM...的方法将要保留的数据备份到另一个表中,将原来的表删除,然后再 ALTER TABLE RENAME TO 命令将备份的表改为原来表的名字。 
这个方法由于不写日志文件,所以速度很快,但是原来的表所拥有的索引和约束都将不存在,需重新建立。另外这个方法只适用于ORACLE 8以后的版本,ORACLE7.3中也可采用这个方法,但NOLOGGIN关键字要由UNRECOVERABLE代替。 


前面比较了在ORACLE中如何批量删除数据的几种方法,以上这几种方法均在oracle 8i for windows,oracle 7.3 for windows,oracle 7.1 for netware中测试通过,在应用中可以根据实际情况选择一种合适的方法进行处理。

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
|
6月前
|
机器学习/深度学习 分布式计算 DataWorks
MaxCompute产品使用合集之MaxCompute读取外部表的速度较慢,有什么方法来提升读取速度
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
26天前
|
SQL Oracle 关系型数据库
Oracle数据库优化方法
【10月更文挑战第25天】Oracle数据库优化方法
34 7
|
30天前
|
存储 机器学习/深度学习 大数据
量子计算与大数据:处理海量信息的新方法
【10月更文挑战第31天】量子计算凭借其独特的量子比特和量子门技术,为大数据处理带来了革命性的变革。相比传统计算机,量子计算在计算效率、存储容量及并行处理能力上具有显著优势,能有效应对信息爆炸带来的挑战。本文探讨了量子计算如何通过量子叠加和纠缠等原理,加速数据处理过程,提升计算效率,特别是在金融、医疗和物流等领域中的具体应用案例,同时也指出了量子计算目前面临的挑战及其未来的发展方向。
|
6月前
|
分布式计算 DataWorks 关系型数据库
MaxCompute产品使用合集之可以使用什么方法将MySQL的数据实时同步到MaxCompute
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
1月前
|
SQL 消息中间件 分布式计算
大数据-115 - Flink DataStream Transformation 多个函数方法 FlatMap Window Aggregations Reduce
大数据-115 - Flink DataStream Transformation 多个函数方法 FlatMap Window Aggregations Reduce
37 0
|
2月前
|
Oracle 安全 关系型数据库
Oracle数据恢复—Oracle数据库误删除的数据恢复方法探讨
删除Oracle数据库数据一般有以下2种方式:delete、drop或truncate。下面针对这2种删除oracle数据库数据的方式探讨一下oracle数据库数据恢复方法(不考虑全库备份和利用归档日志)。
|
3月前
|
机器学习/深度学习 设计模式 人工智能
面向对象方法在AIGC和大数据集成项目中的应用
【8月更文第12天】随着人工智能生成内容(AIGC)和大数据技术的快速发展,企业面临着前所未有的挑战和机遇。AIGC技术能够自动产生高质量的内容,而大数据技术则能提供海量数据的支持,两者的结合为企业提供了强大的竞争优势。然而,要充分利用这些技术,就需要构建一个既能处理大规模数据又能高效集成机器学习模型的集成框架。面向对象编程(OOP)以其封装性、继承性和多态性等特点,在构建这样的复杂系统中扮演着至关重要的角色。
68 3
|
3月前
|
SQL 分布式计算 数据可视化
基于Hadoop的大数据可视化方法
【8月更文第28天】在大数据时代,有效地处理和分析海量数据对于企业来说至关重要。Hadoop作为一个强大的分布式数据处理框架,能够处理PB级别的数据量。然而,仅仅完成数据处理还不够,还需要将这些数据转化为易于理解的信息,这就是数据可视化的重要性所在。本文将详细介绍如何使用Hadoop处理后的数据进行有效的可视化分析,并会涉及一些流行的可视化工具如Tableau、Qlik等。
126 0
|
4月前
|
大数据 数据处理 计算机视觉
使用LabVIEW进行大数据数组操作的优化方法
使用LabVIEW进行大数据数组操作的优化方法
127 3
|
4月前
|
Oracle 关系型数据库 数据库
Oracle数据恢复—Oracle数据库误删除的数据恢复方法
相信有很多oracle数据库用户都遇到过在操作Oracle数据库时误删除某些重要数据的情况,这个时候如果数据库没有备份且数据十分重要的,怎么才能恢复误删除的数据呢?北亚企安数据恢复工程师下面简单介绍几个误删除Oracle数据库数据的恢复方法。

推荐镜像

更多
下一篇
无影云桌面