partition exchange - Tabelle aus Range-Partition in Range-List-Partition umbauen
Nachdem bereits Range-Partitionen in einer Tabelle existieren, sollen zusätzliche Daten in Subpartitionen strukturiert werden:
Mögliches Vorgehen unter 10gR2 unter der Voraussetzung, dass die bestehenden Daten später in genau einer Subpartition landen werden:
Beispiel:
-- Ausgangstabelle erstellen
DROP TABLE fs_ptest;
CREATE TABLE fs_ptest
(
quartal NUMBER (5),
fallstatus varchar2(3),
bsnr VARCHAR2 (9),
lanr VARCHAR2 (9)
)
PARTITION BY RANGE (quartal) (PARTITION pmaxval
VALUES LESS THAN (maxvalue)
TABLESPACE ammmaxval_d_l);
insert into fs_ptest values (20091, 'FIS', 1,1);
insert into fs_ptest values (20091, 'FIS', 2,1);
insert into fs_ptest values (20091, 'FIS', 3,1);
insert into fs_ptest values (20092, 'FIS', 1,2);
insert into fs_ptest values (20092, 'FIS', 2,2);
insert into fs_ptest values (20092, 'FIS', 3,2);
commit;
-- temp Tabelle in Struktur der alten Tabelle, aber ohne Partitionen erstellen
DROP TABLE fs_ptest_pmaxval;
CREATE TABLE fs_ptest_pmaxval
(
quartal NUMBER (5),
fallstatus varchar2(3),
bsnr VARCHAR2 (9),
lanr VARCHAR2 (9)
);
-- relevante Partition rausziehen:
ALTER TABLE fs_ptest EXCHANGE PARTITION pmaxval WITH TABLE fs_ptest_pmaxval;
-- leere Zieltabelle im neuen Format erstellen
DROP TABLE fs_ptest;
CREATE TABLE fs_ptest
(
quartal NUMBER (5),
fallstatus varchar2(3),
bsnr VARCHAR2 (9),
lanr VARCHAR2 (9)
)
LOGGING
PARTITION BY RANGE (quartal)
SUBPARTITION BY LIST (fallstatus)
subpartition template
(
subpartition fis values ('FIS')
, subpartition ber values ('BER')
, subpartition xxx values (default)
)
(
PARTITION pmaxval VALUES LESS THAN (maxvalue)
);
-- Temp-Tabelle in neue Zieltabelle überführen
ALTER TABLE fs_ptest EXCHANGE SUBPARTITION PMAXVAL_FIS WITH TABLE fs_ptest_pmaxval;
-- tmp-Tabelle wieder löschen
DROP TABLE fs_ptest_pmaxval;
Bei mehreren Partitionen und bestehenden Daten, die in mehrere Subpartitionen einsortiert werden sollen, wird der Vorgang entsprechend aufwändiger.
Mögliches Vorgehen unter 10gR2 unter der Voraussetzung, dass die bestehenden Daten später in genau einer Subpartition landen werden:
- unpartitionierte Temp-Tabelle erstellen
- bestehende Partition der Quelltabelle in Temp-Tabelle überführen (per exchange)
- Quelltabelle in neuer Struktur (mit Subpartitionen) neu erstellen
- Temp-Tabelle (per exchange) als Subpartition in neu erstellte Tabelle einfügen
Beispiel:
-- Ausgangstabelle erstellen
DROP TABLE fs_ptest;
CREATE TABLE fs_ptest
(
quartal NUMBER (5),
fallstatus varchar2(3),
bsnr VARCHAR2 (9),
lanr VARCHAR2 (9)
)
PARTITION BY RANGE (quartal) (PARTITION pmaxval
VALUES LESS THAN (maxvalue)
TABLESPACE ammmaxval_d_l);
insert into fs_ptest values (20091, 'FIS', 1,1);
insert into fs_ptest values (20091, 'FIS', 2,1);
insert into fs_ptest values (20091, 'FIS', 3,1);
insert into fs_ptest values (20092, 'FIS', 1,2);
insert into fs_ptest values (20092, 'FIS', 2,2);
insert into fs_ptest values (20092, 'FIS', 3,2);
commit;
-- temp Tabelle in Struktur der alten Tabelle, aber ohne Partitionen erstellen
DROP TABLE fs_ptest_pmaxval;
CREATE TABLE fs_ptest_pmaxval
(
quartal NUMBER (5),
fallstatus varchar2(3),
bsnr VARCHAR2 (9),
lanr VARCHAR2 (9)
);
-- relevante Partition rausziehen:
ALTER TABLE fs_ptest EXCHANGE PARTITION pmaxval WITH TABLE fs_ptest_pmaxval;
-- leere Zieltabelle im neuen Format erstellen
DROP TABLE fs_ptest;
CREATE TABLE fs_ptest
(
quartal NUMBER (5),
fallstatus varchar2(3),
bsnr VARCHAR2 (9),
lanr VARCHAR2 (9)
)
LOGGING
PARTITION BY RANGE (quartal)
SUBPARTITION BY LIST (fallstatus)
subpartition template
(
subpartition fis values ('FIS')
, subpartition ber values ('BER')
, subpartition xxx values (default)
)
(
PARTITION pmaxval VALUES LESS THAN (maxvalue)
);
-- Temp-Tabelle in neue Zieltabelle überführen
ALTER TABLE fs_ptest EXCHANGE SUBPARTITION PMAXVAL_FIS WITH TABLE fs_ptest_pmaxval;
-- tmp-Tabelle wieder löschen
DROP TABLE fs_ptest_pmaxval;
Bei mehreren Partitionen und bestehenden Daten, die in mehrere Subpartitionen einsortiert werden sollen, wird der Vorgang entsprechend aufwändiger.
Kommentare
Kommentar veröffentlichen