-- 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