oracle分区大批量update,Oracle 对分区作调整记得加update global indexes
Oracle 對分區做調整記得加update global indexes
在對分區做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,Oracle 对分区作调整记得加update global indexes的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle流复制实现,Oracle流复
- 下一篇: linux如何用rz上传文件,Linux