Oracle 對分區做調整記得加update global indexes

來源:互聯網
上載者:User

標籤:

  在對分區做ddl操作時,會使分區全域索引失效,需要加上關鍵字update global indexes。

SQL> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE    11.2.0.1.0      Production
TNS for 32-bit Windows: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production

drop table t_range purge;
create table t_range (id number not null PRIMARY KEY, test_date date)
  partition by range (test_date)
(
  partition p_2014_11 values less than (to_date(‘2014-11-01‘, ‘yyyy-mm-dd‘)),
  partition p_2014_12 values less than (to_date(‘2014-12-01‘, ‘yyyy-mm-dd‘)),
  partition p_2015_01 values less than (to_date(‘2015-01-01‘, ‘yyyy-mm-dd‘)),
  partition p_2015_02 values less than (to_date(‘2015-02-01‘, ‘yyyy-mm-dd‘)),
  partition p_2015_03 values less than (to_date(‘2015-03-01‘, ‘yyyy-mm-dd‘))
);
        
insert /*+append */ into t_range  select rownum,
       to_date(to_char(sysdate - 140, ‘J‘) +
               trunc(dbms_random.value(0, 80)),
               ‘J‘)
  from dual
connect by rownum <= 100000;

create index ind_t_range_date on t_range(test_date) nologging;
select * from t_range;
exec dbms_stats.gather_table_stats(user,‘t_range‘,cascade => true);

set autotrace traceonly
select /*+index(t_range ind_t_range_date)*/count(1) from t_range where 
test_date = TO_DATE(‘2015-01-01 00:00:00‘, ‘yyyy-mm-dd hh24:mi:ss‘);
執行計畫
----------------------------------------------------------
Plan hash value: 2542800765
--------------------------------------------------------------------------------------
| Id  | Operation         | Name             | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |                  |     1 |     8 |    23   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE   |                  |     1 |     8 |            |          |
|*  2 |   INDEX RANGE SCAN| IND_T_RANGE_DATE |  1243 |  9944 |    23   (0)| 00:00:01 |
--------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   2 - access("TEST_DATE"=TO_DATE(‘ 2015-01-01 00:00:00‘, ‘syyyy-mm-dd hh24:mi:ss‘))
統計資訊
----------------------------------------------------------
          1  recursive calls
          0  db block gets
          6  consistent gets
          0  physical reads
          0  redo size
        424  bytes sent via SQL*Net to client
        415  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed
set autotrace off

alter table t_range drop partition p_2014_11;
set autotrace traceonly
select /*+index(t_range ind_t_range_date)*/count(1) from t_range where 
test_date = TO_DATE(‘2015-01-01 00:00:00‘, ‘yyyy-mm-dd hh24:mi:ss‘);
select /*+index(t_range ind_t_range_date)*/count(1) from t_range where
*
第 1 行出現錯誤:
ORA-01502: 索引 ‘TEST.IND_T_RANGE_DATE‘ 或這類索引的分區處於不可用狀態
set autotrace off;

alter index ind_t_range_date rebuild nologging;

alter table t_range drop partition p_2014_12 update global indexes;
set autotrace traceonly
select /*+index(t_range ind_t_range_date)*/count(1) from t_range where 
test_date = TO_DATE(‘2015-01-01 00:00:00‘, ‘yyyy-mm-dd hh24:mi:ss‘);
執行計畫
----------------------------------------------------------
Plan hash value: 2542800765
--------------------------------------------------------------------------------------
| Id  | Operation         | Name             | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |                  |     1 |     8 |    13   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE   |                  |     1 |     8 |            |          |
|*  2 |   INDEX RANGE SCAN| IND_T_RANGE_DATE |  1243 |  9944 |    13   (0)| 00:00:01 |
--------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   2 - access("TEST_DATE"=TO_DATE(‘ 2015-01-01 00:00:00‘, ‘syyyy-mm-dd hh24:mi:ss‘))
統計資訊
----------------------------------------------------------
          1  recursive calls
          0  db block gets
          6  consistent gets
          0  physical reads
          0  redo size
        424  bytes sent via SQL*Net to client
        415  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed
set autotrace off;

Oracle 對分區做調整記得加update global indexes

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.