2009-12-30 2 views
4

Если мы используем инструкцию ALTER TABLE RENAME PARTITION для переименования существующих разделов в таблице Oracle, нужно ли воссоздать локальные секционированные индексы с новыми именами разделов?Переименование разделов в ORACLE

+0

Позвольте мне знать, если я не предоставили достаточно подробные сведения в этом вопросе. –

ответ

7

Нет, переименование разделов не влияет на локально разделенные индексы. Вы можете легко проверить, что:

--create table 
CREATE TABLE t (
    c1 DATE, 
    c2 NUMBER(3)) 
partition by range (c1) (
    partition t_nov values less than (
    to_date('01-12-2009 00:00:00', 'DD-MM-YYYY HH24:MI:SS') 
), 
    partition t_dec values less than (
    to_date('01-01-2010 00:00:00', 'DD-MM-YYYY HH24:MI:SS') 
) 
) 
/

--create index 
create index idx_t on t (c1) local (partition t_nov, partition t_dec); 

--insert some rows 
insert into t values (sysdate, 1); 
insert into t values (sysdate, 1); 
insert into t values (sysdate, 1); 
insert into t values (sysdate, 1); 
insert into t values (sysdate, 1); 
insert into t values (sysdate, 1); 
insert into t values (sysdate, 1); 
insert into t values (sysdate, 1); 
insert into t values (sysdate, 1); 
insert into t values (sysdate, 1); 

--gather statistics 
exec dbms_stats.gather_table_stats('SYSTEM', 'T'); 

--set autotrace on, to determine that index is used 
set autotrace on 

--select indexed column 
select c1 from t where c1 < sysdate+1; 

-------------------------------------------------------------------------------------------------- 
| Id | Operation    | Name | Rows | Bytes | Cost (%CPU)| Time  | Pstart| Pstop | 
-------------------------------------------------------------------------------------------------- 
| 0 | SELECT STATEMENT   |  | 11 | 88 |  1 (0)| 00:00:01 |  |  | 
| 1 | PARTITION RANGE ITERATOR|  | 11 | 88 |  1 (0)| 00:00:01 |  1 | KEY | 
|* 2 | INDEX RANGE SCAN  | IDX_T | 11 | 88 |  1 (0)| 00:00:01 |  1 | KEY | 
-------------------------------------------------------------------------------------------------- 

--rename partition 
alter table t rename partition t_dec to t_december; 
Table altered. 


select c1 from t where c1 < sysdate+1; 

-------------------------------------------------------------------------------------------------- 
| Id | Operation    | Name | Rows | Bytes | Cost (%CPU)| Time  | Pstart| Pstop | 
-------------------------------------------------------------------------------------------------- 
| 0 | SELECT STATEMENT   |  | 11 | 88 |  1 (0)| 00:00:01 |  |  | 
| 1 | PARTITION RANGE ITERATOR|  | 11 | 88 |  1 (0)| 00:00:01 |  1 | KEY | 
|* 2 | INDEX RANGE SCAN  | IDX_T | 11 | 88 |  1 (0)| 00:00:01 |  1 | KEY | 
-------------------------------------------------------------------------------------------------- 

Индекс по-прежнему используется, после переименования раздела

+0

Спасибо за сверкающую демонстрацию. Цените свое время. –

2

Переименование разделов не влияет на локально разделенные индексы, поэтому вам не нужно будет перестраивать индексы.

+0

Спасибо за ответ. –

Смежные вопросы