2016-07-05 19 views
0

Um die Daten in einer einzigen Partition zu komprimieren, verwende ich den folgenden Ansatz:ORACLE EXCHANGE PARTITION und PARTITION INDIZES

-- I create a table with the same structure of the ORIGINAL TABLE, but 
-- on a new tablespace (NEW_TBS_DATA) 

CREATE TABLE AUXILIARY_TABLE TABLESPACE NEW_TBS_DATA AS 
SELECT * FROM ORIGINAL_TABLE WHERE 1=0 

-- I create the index on the AUXILIARY_TABLE, on a new tablespace 
-- for indexes (NEW_TBS_IDX) 

CREATE INDEX I_1 ON AUXILIARY_TABLE(START_DATE) TABLESPACE NEW_TBS_IDX 
CREATE INDEX I_2 ON AUXILIARY_TABLE(ID_FILE) TABLESPACE NEW_TBS_IDX 
CREATE INDEX I_3 ON AUXILIARY_TABLE(DESCRIPTION) TABLESPACE NEW_TBS_IDX 
CREATE INDEX I_4 ON AUXILIARY_TABLE(ZIP_CODE) TABLESPACE NEW_TBS_IDX 
CREATE INDEX I_5 ON AUXILIARY_TABLE(BH_TRAFFIC) TABLESPACE NEW_TBS_IDX 

-- I move data from partition 20160529 to auxiliary_table 

ALTER TABLE ORIGINAL_TABLE EXCHANGE PARTITION PARTITION_20160529 WITH TABLE AUXILIARY_TABLE INCLUDING INDEXES WITHOUT VALIDATION 

-- I compress data using the new tablespace NEW_TBS_DATA on auxiliary_table 

ALTER TABLE AUXILIARY_TABLE MOVE TABLESPACE NEW_TBS_DATA PARALLEL 4 COMPRESS 

-- I move the data back to the original table, with the same exchange statement: 

ALTER TABLE ORIGINAL_TABLE EXCHANGE PARTITION PARTITION_20160529 WITH TABLE AUXILIARY_TABLE including indexes without validation 

-- I drop the auxiliary_table 

DROP TABLE AUXILIARY_TABLE CASCADE CONSTRAINTS PURGE 

Warum am Ende des Prozesses die Partition INDIZES auf den alten Tabellen sind anstelle des neuen Tablespace (NEW_TBS_IDX)?

Antwort

1

Abschnitt "einschließlich Indizes" gilt nur für lokale Indizes. Siehe https://docs.oracle.com/cd/E11882_01/server.112/e25523/part_admin002.htm Abschnitt (Austausch von Partitionen)

+0

Was kann ich tun, um zu erkennen, dass nach der zweiten EXCHANGE PARTITION Anweisung, die Indizes auf NEW_TBS_IDX statt auf OLD_TBS_IDX? – UltraCommit

+1

Ich denke, nur verschieben Sie es explizit mit zusätzlichen Befehl. –