我的编程空间,编程开发者的网络收藏夹
学习永远不晚

数据库中如何高效率删除大表历史数据

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

数据库中如何高效率删除大表历史数据

这篇文章主要介绍数据库中如何高效率删除大表历史数据,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

清理大表历史数据
通过将非分区表Online Redefinition转换为以删除条件为Range范围分区的Partition-ed Table,再直接Truncate Partiton的方法来加速历史数据的清理, 
同时又不影响业务的在线。
create table order_history as select * from dba_objects;
select count(*) from order_history;
select count(*) from order_history where created < sysdate-365;

  COUNT(*)
———-
     49983
收集统计信息
exec dbms_stats.gather_table_stats('SCOTT','ORDER_HISTORY');

create table order_history_int( 
 OWNER                                              VARCHAR2(30),
 OBJECT_NAME                                        VARCHAR2(128),
 SUBOBJECT_NAME                                     VARCHAR2(30),
 OBJECT_ID                                          NUMBER,
 DATA_OBJECT_ID                                     NUMBER,
 OBJECT_TYPE                                        VARCHAR2(19),
 CREATED                                            DATE,
 LAST_DDL_TIME                                      DATE,
 TIMESTAMP                                          VARCHAR2(19),
 STATUS                                             VARCHAR2(7),
 TEMPORARY                                          VARCHAR2(1),
 GENERATED                                          VARCHAR2(1),
 SECONDARY                                          VARCHAR2(1))
partition by range(created)
( partition p1 values less than (to_date('2010-01-01','YYYY-MM-DD')) tablespace users,
  partition p2 values less than (to_date('2011-01-01','YYYY-MM-DD')) tablespace users,
  partition p3 values less than (to_date('2012-01-01','YYYY-MM-DD')) tablespace users,
  partition p4 values less than (to_date('2013-01-01','YYYY-MM-DD')) tablespace users,
  partition p5 values less than (maxvalue) tablespace users);
  
begin
  dbms_redefinition.can_redef_table(uname        => 'SCOTT',
                                    tname        => 'ORDER_HISTORY',
                                    options_flag => DBMS_REDEFINITION.CONS_USE_ROWID);
end;
/

begin
DBMS_REDEFINITION.START_REDEF_TABLE(uname        => 'SCOTT',
                                      orig_table   => 'ORDER_HISTORY',
                                      int_table    => 'ORDER_HISTORY_INT',
                                      options_flag => DBMS_REDEFINITION.cons_use_rowid);
end;
/

SQL> select count(*) from ORDER_HISTORY_INT;

  COUNT(*)
———-
     50731

DECLARE
  num_errors PLS_INTEGER;
BEGIN
  DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS(uname            => 'SCOTT',
                                          orig_table       => 'ORDER_HISTORY',
                                          int_table        => 'ORDER_HISTORY_INT',
                                          copy_indexes     => 0,
                                          copy_triggers    => TRUE,
                                          copy_constraints => FALSE,
                                          copy_privileges  => TRUE,
                                          ignore_errors    => FALSE,
                                          num_errors       => num_errors,
                                          copy_statistics  => TRUE);
END;
/

begin
  dbms_redefinition.finish_redef_table(uname      => 'SCOTT',
                                       orig_table => 'ORDER_HISTORY',
                                       int_table  => 'ORDER_HISTORY_INT');
end;
/

alter table ORDER_HISTORY truncate partition p1;
alter table ORDER_HISTORY truncate partition p2;
alter table ORDER_HISTORY truncate partition p3;
SQL> select count(*) from ORDER_HISTORY;

  COUNT(*)
———-
       748

以上是“数据库中如何高效率删除大表历史数据”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

数据库中如何高效率删除大表历史数据

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL如何删除数据库表数据

要删除MySQL数据库表中的数据,可以使用DELETE语句。语法如下:DELETE FROM table_name;如果要删除特定条件的数据,可以在DELETE语句中加入WHERE子句。DELETE FROM table_name W
MySQL如何删除数据库表数据
2024-04-15

Mysql数据库如何使用DELETE语句从数据库表中删除数据(数据库数据删除)

目录数据库数据删除:使用DELETE语句从数据库表中删除数据DELETE语句简介使用示例注意事项和最佳实践1. 慎重使用无条件删除2. 使用事务进行删除操作3. 使用合适的索引4. 谨慎使用DELETE CASCADE5. 定期备份数据结论
Mysql数据库如何使用DELETE语句从数据库表中删除数据(数据库数据删除)
2024-08-12

阿里云数据库数据删除:如何安全有效地删除数据?

简介在使用阿里云数据库时,有时候我们需要删除一些不再需要的数据。然而,数据删除是一个敏感的操作,如果不小心操作,可能会导致数据丢失或泄露。因此,在进行数据删除之前,我们需要了解一些注意事项和最佳实践。如何安全有效地删除数据1.备份数据在进行数据删除之前,一定要先备份数据。备份数据可以防止误删或意外删除导致的数据丢失。阿
阿里云数据库数据删除:如何安全有效地删除数据?
2024-01-29

如何删除SQLite数据库中的数据

要删除SQLite数据库中的数据,可以使用DELETE语句。以下是一个示例:DELETE FROM table_name WHERE condition;在上面的语句中,table_name 是要删除数据的表名,condition 是一个
如何删除SQLite数据库中的数据
2024-04-09

java如何遍历数据库表中的数据

在Java中,可以使用JDBC(Java Database Connectivity)来连接数据库,并使用ResultSet对象来遍历数据库表中的数据。以下是一个示例代码:```javaimport java.sql.*;public cl
2023-08-14

Java中如何高效遍历大数据量集合?(在Java中,如何实现对大数据量集合的高效遍历?)

Java中遍历大数据量集合的优化方法:选择合适的数据结构(线性/非线性)并行遍历(多线程)惰性遍历(按需处理)提前分配内存使用原生循环深度/广度优先遍历(针对树/图)最佳实践:避免迭代器缓存集合预先计算值优化内存管理剖析性能瓶颈
Java中如何高效遍历大数据量集合?(在Java中,如何实现对大数据量集合的高效遍历?)
2024-04-02

oracle中如何删除表中数据

这篇文章给大家分享的是有关oracle中如何删除表中数据的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在oracle中删除表中数据可以使用truncate table 表名、delete from 表名 wher
2023-06-27

SQL Server大表如何快速删除数据

在SQL Server中,如何快速删除大表中的数据呢?  回答这个问题前,我们必须弄清楚上下文环境和以及结合实际、具体的需求,不同场景有不同的应对方法。     1: 整张表的数据全部删除     如果是整张表的数据全部清空、删除,这种场景倒是非常简单,TRU
SQL Server大表如何快速删除数据
2018-02-07

sqlserver如何删除表中的数据

要删除表中的数据,可以使用DELETE语句。例如,要删除名为“table_name”的表中的所有数据,可以执行以下操作:DELETE FROM table_name;如果只想删除满足特定条件的数据,则可以添加WHERE子句,如下所示:D
sqlserver如何删除表中的数据
2024-03-07

编程热搜

目录