Czy ALTER TABLE COMPRESS FOR OLTP Ma Wpływ Na Partycje I Subpartycje
Polecenie ALTER TABLE modyfikuje tabelę i umożliwia zmianę zachowania tejże tabeli. Czy ustawienie tabeli jako kompresowalnej wpływa również na jej partycje i subpartycje?
Przygotowanie danych
DROP TABLE T1 / CREATE TABLE T1(id NUMBER, status VARCHAR2(100)) PARTITION BY RANGE (id) SUBPARTITION BY LIST (status) SUBPARTITION TEMPLATE ( SUBPARTITION s_status_valid VALUES ('VALID'), SUBPARTITION s_status_invalid VALUES ('INVALID') ) ( PARTITION p1 VALUES LESS THAN (100), PARTITION p2 VALUES LESS THAN (200) ) INSERT INTO T1 SELECT ROWNUM, CASE WHEN MOD(ROWNUM, 2) = 0 THEN 'VALID' ELSE 'INVALID' END FROM dual CONNECT BY ROWNUM <= 200 / COMMIT; /
Stan początkowy
SELECT table_name, compression, compress_for FROM dba_tables WHERE table_name = 'T1' /
TABLE_NAME COMPRESSION COMPRESS_FOR
---------- ----------- ------------
T1 (null) (null)
SELECT table_name, partition_name, high_value, compressio, compress_for FROM dba_tab_partitions WHERE table_name = 'T1' /
TABLE_NAME PARTITION_NAME HIGH_VALUE COMPRESSION COMPRESS_FOR
---------- -------------- ---------- ----------- ------------
T1 P2 200 NONE (null)
T1 P1 100 NONE (null)
SELECT table_name, partition_name, subpartition_name, high_value, compression, compress_for FROM dba_tab_subpartitions WHERE table_name = 'T1' /
TABLE_NAME SUBPARTITION_NAME PARTITION_NAME HIGH_VALUE COMPRESSION COMPRESS_FOR
---------- ----------------- -------------- ---------- ----------- ------------
T1 P1 P1_S_STATUS_INVALID 'INVALID' DISABLED (null)
T1 P1 P1_S_STATUS_VALID 'VALID' DISABLED (null)
T1 P2 P2_S_STATUS_INVALID 'INVALID' DISABLED (null)
T1 P2 P2_S_STATUS_VALID 'VALID' DISABLED (null)
Włączenie kompresji
Poniżej znajduje się polecenie ALTER TABLE z opcją COMPRESS FOR OLTP, która włącza zaawansowaną kompresję na tabeli T1. W przypadku, w którym na tabeli istnieją partycje i subpartycje poniższy ALTER nie kompresuje danych istniejących już w tabeli, tylko oznacza tabelę jak i jej partycje i subpartycje jako kompresowalne.
ALTER TABLE T1 COMPRESS FOR OLTP /
SELECT table_name, partition_name, high_value, compression, compress_for FROM dba_tab_partitions WHERE table_name = 'T1' /
TABLE_NAME PARTITION_NAME HIGH_VALUE COMPRESSION COMPRESS_FOR
---------- -------------- ---------- ----------- ------------
T1 P2 200 ENABLED OLTP
T1 P1 100 ENABLED OLTP
SELECT table_name, partition_name, subpartition_name, high_value, compression, compress_for FROM dba_tab_subpartitions WHERE table_name = 'T1' /
TABLE_NAME PARTITION_NAME SUBPARTITION_NAME HIGH_VALUE COMPRESSION COMPRESS_FOR
---------- -------------- ------------------- ---------- ----------- ------------
T1 P1 P1_S_STATUS_INVALID 'INVALID' ENABLED OLTP
T1 P1 P1_S_STATUS_VALID 'VALID' ENABLED OLTP
T1 P2 P2_S_STATUS_INVALID 'INVALID' ENABLED OLTP
T1 P2 P2_S_STATUS_VALID 'VALID' ENABLED OLTP
Dodanie nowej partycji i subpartycji
Jak można się było spodziewać polecenie ALTER TABLE oznaczył wszystkie istniejące partycje jak i subpartycje jako kompresowalne, ale czy ma również impact na nowo tworzone partycje i subpartycje?
ALTER TABLE T1 ADD PARTITION P3 VALUES LESS THAN (300) / ALTER TABLE T1 MODIFY PARTITION P2 ADD SUBPARTITION P2_S_STATUS_ERROR VALUES ('ERROR') /
SELECT table_name, partition_name, high_value, compression, compress_for FROM dba_tab_partitions WHERE table_name = 'T1' /
TABLE_NAME PARTITION_NAME HIGH_VALUE COMPRESSION COMPRESS_FOR
---------- -------------- ---------- ----------- ------------
T1 P2 200 ENABLED OLTP
T1 P1 100 ENABLED OLTP
T1 P3 300 ENABLED OLTP
SELECT table_name, partition_name, subpartition_name, high_value, compression, compress_for FROM dba_tab_subpartitions WHERE table_name = 'T1' /
TABLE_NAME PARTITION_NAME SUBPARTITION_NAME HIGH_VALUE COMPRESSION COMPRESS_FOR
---------- -------------- ------------------- ---------- ----------- ------------
T1 P1 P1_S_STATUS_INVALID 'INVALID' ENABLED OLTP
T1 P1 P1_S_STATUS_VALID 'VALID' ENABLED OLTP
T1 P2 P2_S_STATUS_ERROR 'ERROR' ENABLED OLTP
T1 P2 P2_S_STATUS_INVALID 'INVALID' ENABLED OLTP
T1 P2 P2_S_STATUS_VALID 'VALID' ENABLED OLTP
Jak widać na załączonym przykładzie zmiany dokonywane na tabeli wpływają nie tylko na jej istniejące partycje i subpartycje, ale również na te, które zostaną utworzone w przyszłości, dzięki czemu, programista nie musi pamiętać o konieczności pisania dodatkowych linii kodu, aby zachować spójność działania.
Szymon
Komentarze |0|
Tagi: ALTER TABLE, COMPRESS FOR OLTP, PARTITION, SUBARTITION