-- Anlage einer Hilfstabelle mit den Partitionsnamen
-- und den über to_lob umgewandelten HIGH_VALUE-Angaben
create table part_rename
as
select partition_name, to_lob(high_value) text
from user_tab_partitions
where table_name = 'MY_TABLE_NAME';
-- Generierung von Kommandos: ALTER TABLE ... RENAME PARTITION
-- da es sich um wochenbasierte Daten handelt,
-- setze ich den Partitionsnamen auf HIGH_VALUE - 7 Tage
select 'alter table my_table_name rename partition '
|| partition_name
|| ' TO my_table_name_p'
|| to_char(to_date(substr(text, 11, 10), 'yyyy-mm-dd') - 7, 'yyyymmdd')
|| ';' text
from part_rename
order by 1;
-- Ausführung der generierten Kommandos
...
Samstag, Mai 14, 2011
Namensgebung für Interval Partitions
Beim Übertragen von Daten aus einer nicht partitionierten in eine (datumsbasiert) intervall-partitionierte Tabelle habe ich mich heute einmal mehr darüber geärgert, dass die system-generierten Intervall-Partitionsnamen keine Semantik enthalten, so dass ich nicht aus dem Partitionsnamen auf die enthaltenen Daten schliessen kann (man kann zwar in Oracle 11 Partitionen auch über eine neue FOR (datumsangabe) Syntax ansprechen, aber damit bin ich noch nicht völlig zufrieden). Um die Semantik zu ergänzen, wollte ich die Namen auf der Basis der HIGH_VALUE-Angaben aus USER_TAB_PARTITIONS ändern, was so einfach aber nicht geht, da HIGH_VALUE eine LONG-Spalte ist, mit der man nicht sehr viel anfangen kann - was man damit machen kann, hat Adrian Billington gelegentlich gezeigt - und da gäbe es sicher auch noch elegantere Lösungen, als die, auf die ich gekommen bin. Hier jedenfalls meine Variante:
Beim Eintreffen neuer Daten jenseits der vorhandenen Intervall-Partitionen müsste man das natürlich wiederholen. Falls jemand eine bessere Lösung für das Problem kennt, würde ich mich über sachdienliche Hinweise freuen.
Abonnieren
Kommentare zum Post (Atom)
Keine Kommentare:
Kommentar veröffentlichen