码迷,mamicode.com
首页 > 数据库 > 详细

Oracle 对分区做调整记得加update global indexes

时间:2015-03-16 16:24:54      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:

  在对分区做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

标签:

原文地址:http://blog.csdn.net/stevendbaguo/article/details/44307257

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!