2017-07-12 5 views
0

範囲パーティションの月間のテーブルがあります。主キーを含むテーブルのインデックスはローカルインデックスです。ローカルインデックスを使用した範囲パーティションの交換

ただし、これらのテーブルのパーティションをパーティションなしのテーブルと交換すると、ローカルインデックスはUNUSABLEになります。 Oracleのマニュアルでは、グローバル索引の問題についてのみ説明しています。そこで、分割されたキーをインデックスに追加することにより、グローバルプライマリインデックスをローカルに変換しました。

例クエリ -

CREATE TABLE sourcetable 
(owner varchar2(30), OBJECT_NAME VARCHAR2(100)) 
PARTITION BY RANGE (owner) 
(PARTITION P1 VALUES LESS THAN (MAXVALUE)); 

CREATE TABLE DESTTABLE 
(owner varchar2(30), OBJECT_NAME VARCHAR2(100)); 

create index sourcetable_idx 
on sourcetable (owner) 
local ; 

alter table sourcetable add constraint src_pk primary key (owner); 

insert into sourcetable select U.OBJECT_ID, u.object_name from user_objects u 
where rownum <11; 

select index_name,partition_name,status from user_ind_partitions 
where index_name IN (
select index_name from user_indexes 
where table_name = 'SOURCETABLE' 
); 

選択パーティションを交換した後

USABLE

ALTER TABLE sourcetable 
EXCHANGE PARTITION p1 WITH TABLE desttable; 

select index_name,partition_name,status from user_ind_partitions 
where index_name IN (
select index_name from user_indexes 
where table_name = 'SOURCETABLE' 
); 

インデックスステータスに選択すると、インデックスステータスを与える指標ステータスを与えますas

UNUSABLE

我々はオンラインパーティション交換をしたいです。我々は

のUPDATE INDEXES

EXCHANGE PARTITIONの

声明で

ようなステートメントを使用して交換を行うことができます方法はありますか?

UPDATE INDEXESでEXCHANGEステートメントを使用しようとしましたが、インデックスはUNUSABLEになりました。

ALTER TABLE sourcetable 
EXCHANGE PARTITION p1 WITH TABLE desttable UPDATE INDEXES; 

答えて

0

UPDATE INDEXESは、グローバルインデックスのみに適用されます。あなたは何も持っていないので、この句は効果がありません。

INCLUDING INDEXESを使用する必要があります。ただし、このためには、ソース表と宛先表に同じ索引を作成する必要があります。試してみてください:

CREATE INDEX desttable_idx ON desttable (OWNER); 
ALTER TABLE sourcetable EXCHANGE PARTITION p1 WITH TABLE desttable INCLUDING INDEXES; 
関連する問題