iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Partition table分区表删除分区数据时导致索引失效怎么办
  • 825
分享到

Partition table分区表删除分区数据时导致索引失效怎么办

2024-04-02 19:04:59 825人浏览 八月长安
摘要

小编给大家分享一下Partition table分区表删除分区数据时导致索引失效怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下

小编给大家分享一下Partition table分区表删除分区数据时导致索引失效怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

一、描述

       有个小任务就是要删除些数据,哈哈,先自己小开心一下。因为要删除的数据表是我之前转换成的分区表。这个分区表是按照里面有个创建时间字段来分区的,1个季度为1个分区。所以我现在要将2017年7月1日之前的数据删除(数据量约1000万),可以直接删除表分区数据就好。如果要是用delete去删除这么多的数据,我还要写存储过程,分批提交的这样做。就是这样的一简单的truncate partition 引发了后继的业务故障。最终查询到该表的索引失效,重建立后恢复。真是汗!

二、实验

1.创建环境

  1. sql> create table TEST_PARTAS (id number(11), ACCOUNT_ID number(11) ,CTIME date)

  2.   2  partition by range (CTIME)

  3.   3  interval( NUMTOYMINTERVAL(3,'month'))

  4.   4 (partition P0 values less than (TO_DATE('2016-01-01','yyyy-mm-dd')),

  5.   5   partition p1 values less than (to_date('2017-01-01','yyyy-mm-dd')));


  6. Table created.


  7. SQL> insert into TEST_PARTAS select t.id,t.account_id,t.create_time from act_test t;

  8. 3483178 rows created.


  9. SQL> commit;

  10. Commit complete.


  11. SQL> EXEC SYS.DBMS_STATS.GATHER_TABLE_STATS('SAM','TEST_PARTAS');

  12. PL/SQL procedure successfully completed.

2.检查分区表及数据

  1. SQL> select count(*) from TEST_PARTAS;


  2.   COUNT(*)

  3. ----------

  4.    3483178


  5. SQL> set lines 120 pages 200;

  6. SQL> set long 9999999

  7. SQL> col table_name for a15

  8. SQL> col PARTITION_NAME for a10


  9. SQL> select t.table_name,t.partition_name,t.num_rows,t.blocks,t.interval,t.high_value from USER_TAB_PARTITIONS t;


  10. TABLE_NAME      PARTITION_   NUM_ROWS     BLOCKS INT HIGH_VALUE

  11. --------------- ---------- ---------- ---------- --- --------------------------------------------------

  12. TEST_PARTAS     P0            2182116       6046 NO TO_DATE(' 2016-01-01 00:00:00', 'SYYYY-MM-DD HH24:

  13.                                                      MI:SS', 'NLS_CALENDAR=GREGoRIAN')


  14. TEST_PARTAS     P1             616290      36506 NO TO_DATE(' 2017-01-01 00:00:00', 'SYYYY-MM-DD HH24:

  15.                                                      MI:SS', 'NLS_CALENDAR=GREGORIAN')


  16. TEST_PARTAS     SYS_P1611       44829       4030 YES TO_DATE(' 2017-04-01 00:00:00', 'SYYYY-MM-DD HH24:

  17.                                                      MI:SS', 'NLS_CALENDAR=GREGORIAN')


  18. TEST_PARTAS     SYS_P1612       21706       3022 YES TO_DATE(' 2017-07-01 00:00:00', 'SYYYY-MM-DD HH24:

  19.                                                      MI:SS', 'NLS_CALENDAR=GREGORIAN')


  20. TEST_PARTAS     SYS_P1613      172525       3022 YES TO_DATE(' 2017-10-01 00:00:00', 'SYYYY-MM-DD HH24:

  21.                                                      MI:SS', 'NLS_CALENDAR=GREGORIAN')


  22. TEST_PARTAS     SYS_P1614      442435       2014 YES TO_DATE(' 2018-01-01 00:00:00', 'SYYYY-MM-DD HH24:

  23.                                                      MI:SS', 'NLS_CALENDAR=GREGORIAN')


  24. TEST_PARTAS     SYS_P1615        3277        238 YES TO_DATE(' 2018-04-01 00:00:00', 'SYYYY-MM-DD HH24:

  25.                                                      MI:SS', 'NLS_CALENDAR=GREGORIAN')



  26. 7 rows selected.


3.创建主键和索引

  1. SQL> alter table TEST_PARTAS add constraint pk_id primary key(ID);

  2. Table altered.


  3. SQL> CREATE INDEX IND_ACCOUNT_ID ON TEST_PARTAS (ACCOUNT_ID);

  4. Index created.


4.检查索引状态,当前状态可用

  1. SQL> select T.INDEX_NAME,T.TABLE_NAME,T.STATUS from user_indexes t where t.table_name='TEST_PARTAS';


  2. INDEX_NAME                     TABLE_NAME                     STATUS

  3. ------------------------------ ------------------------------ --------

  4. PK_ID                          TEST_PARTAS VALID

  5. IND_ACCOUNT_ID                 TEST_PARTAS VALID


5.用truncate 删除p0分区数据,不加update index参数

  1. SQL> alter table test_partas truncate partition p0;


  2. Table truncated.


6.检查索引状态,状态不可用 

  1. SQL> select T.INDEX_NAME,T.TABLE_NAME,T.STATUS from user_indexes t where t.table_name='TEST_PARTAS';


  2. INDEX_NAME                     TABLE_NAME                     STATUS

  3. ------------------------------ ------------------------------ --------

  4. PK_ID                          TEST_PARTAS UNUSABLE

  5. IND_ACCOUNT_ID                 TEST_PARTAS UNUSABLE


7.重建立索引,要加online ,尽量减小对业务的冲击

  1. SQL> alter index PK_ID rebuild online;


  2. Index altered.


  3. SQL> alter index IND_ACCOUNT_ID rebuild online;


  4. Index altered.


8.检查索引状态,此时索引恢复正常可用状态

  1. SQL> select T.INDEX_NAME,T.TABLE_NAME,T.STATUS from user_indexes t where t.table_name='TEST_PARTAS';


  2. INDEX_NAME                     TABLE_NAME                     STATUS

  3. ------------------------------ ------------------------------ --------

  4. PK_ID                          TEST_PARTAS VALID

  5. IND_ACCOUNT_ID                 TEST_PARTAS VALID


9.用truncate 删除p1分区数据,增加update index参数

  1. SQL> alter table test_partas truncate partition p1 update indexes;


  2. Table truncated.

10.检查索引状态,此时索引正常可用状态

  1. SQL> select T.INDEX_NAME,T.TABLE_NAME,T.STATUS from user_indexes t where t.table_name='TEST_PARTAS';


  2. INDEX_NAME                     TABLE_NAME                     STATUS

  3. ------------------------------ ------------------------------ --------

  4. PK_ID                          TEST_PARTAS VALID

  5. IND_ACCOUNT_ID                 TEST_PARTAS VALID

三、扩展

       通过这个问题,我们再扩展一下,如果drop分区会不会同样影响索引,答案是肯定的,删除分区,索引仍然失效。

  1. SQL> alter table test_partas drop partition SYS_P1611;


  2. Table altered.


  3. SQL> select T.INDEX_NAME,T.TABLE_NAME,T.STATUS from user_indexes t where t.table_name='TEST_PARTAS';


  4. INDEX_NAME                     TABLE_NAME                     STATUS

  5. ------------------------------ ------------------------------ --------

  6. PK_ID                          TEST_PARTAS UNUSABLE

  7. IND_ACCOUNT_ID                 TEST_PARTAS UNUSABLE

以上是“Partition table分区表删除分区数据时导致索引失效怎么办”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网数据库频道!

您可能感兴趣的文档:

--结束END--

本文标题: Partition table分区表删除分区数据时导致索引失效怎么办

本文链接: https://www.lsjlt.com/news/63984.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • Partition table分区表删除分区数据时导致索引失效怎么办
    小编给大家分享一下Partition table分区表删除分区数据时导致索引失效怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下...
    99+
    2024-04-02
  • oracle分区表全局唯一索引失效导致无法增删改怎么办
    这篇文章主要为大家展示了“oracle分区表全局唯一索引失效导致无法增删改怎么办”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“oracle分区表全局唯一索引失效...
    99+
    2024-04-02
  • 怎么理解数据库移动分区表和分区索引的表空间
    这篇文章主要介绍“怎么理解数据库移动分区表和分区索引的表空间”,在日常操作中,相信很多人在怎么理解数据库移动分区表和分区索引的表空间问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2024-04-02
  • Oracle怎么查询Interval partition分区表内数据
    本篇内容介绍了“Oracle怎么查询Interval partition分区表内数据”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家...
    99+
    2024-04-02
  • hive分区表怎么导入数据
    要将数据导入Hive分区表,可以通过以下步骤实现: 准备好要导入的数据文件,确保数据格式与分区表的结构匹配。 使用Hive的...
    99+
    2024-03-12
    hive
  • oracle删除分区后索引不可用怎么解决
    在 Oracle 中,当你删除一个包含索引的分区后,索引将不再可用。这是因为索引是针对特定分区数据而创建的,当分区被删除后,索引的元...
    99+
    2023-08-20
    oracle
  • 怎么导入导出Oracle分区表数据
    这篇文章主要介绍“怎么导入导出Oracle分区表数据”,在日常操作中,相信很多人在怎么导入导出Oracle分区表数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么导入导出...
    99+
    2024-04-02
  • ORACLE删除表分区和数据的方法是什么
    这篇文章主要讲解了“ORACLE删除表分区和数据的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ORACLE删除表分区和数据的方法是什么”吧!1....
    99+
    2024-04-02
  • 升级win10一周年更新会导致误删Linux分区怎么办
    小编给大家分享一下升级win10一周年更新会导致误删Linux分区怎么办,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!对于许多Linux用户来说,在电脑上再装个其它系统并不是难事。只要心情好,你可以随意在机器里塞下Ubun...
    99+
    2023-06-14
  • 数据库中因删除归档日志导致备份失败怎么办
    这篇文章将为大家详细讲解有关数据库中因删除归档日志导致备份失败怎么办,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 先说明一下,目前碰到两种情...
    99+
    2024-04-02
  • SQLServer 错误 1793 由于没有为 FILESTREAM 数据指定分区方案,因此无法删除索引“%.*ls”。 故障 处理 修复 支持远程
    详细信息 Attribute 值 产品名称 SQL Server 事件 ID 1793 事件源 MSSQLSERVER 组件 SQLEngine 符号名称 FILESTREAM_BASEDATA_NEED_SA...
    99+
    2023-11-05
    分区 索引 故障
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作