ORACLE-9.2 Daten in andere Tabelle auslagern

Hallo,

ich möchte Daten einer Tabelle auslagern, weiss aber noch nicht, wie bzw was der beste Weg ist.

Die Tabelle besitzt 82.672.372 Datensätze mit einem Wachstum von rund 800.000 pro Tag (
ist eine Tabelle für ein Auditing)

Nun sollen die Datensätze in eine andere Tabelle geschrieben werden und aus der Originaltabelle gelöscht werden
ohne die in der Zwischenzeit neu dazugekommenen Daten mitzulöschen.

Deshalb kann ich ein „create table as select“ mit anschliessendem „truncate“ vergessen, da in die 1.Tabelle munter weiter geschrieben wird und
ich mit einem truncate auch die neuen Sätze löschen würde.
Und ein Script mit „insert into neutab“ und „delete from oldtab“ innerhalb einer Transaction hört sich bei dieser Datenmenge
etwas lang an.

Gibt es eine andere Möglichkeit, die Daten aus der 1. Tabelle zu schaufeln?

Die Datenbank ist eine ORACLE 9.2.

liebe Grüsse
Regine

Mahlzeit,

Deshalb kann ich ein „create table as select“ mit
anschliessendem „truncate“ vergessen, da in die 1.Tabelle
munter weiter geschrieben wird und
ich mit einem truncate auch die neuen Sätze löschen würde.

OK, verstehe…

Und ein Script mit „insert into neutab“ und „delete from
oldtab“ innerhalb einer Transaction hört sich bei dieser
Datenmenge etwas lang an.

Stimmt, aber was spräche gegen ein „create table as select“ mit anschließenden, „delete“-Statements auf der Originaltabelle? z.B. könntest du mit einem Statement grob alle Datensätze bis gestern löschen, anschließend diejenigen, deren ID (oder was du für einen Primary Key hast) kleiner ist, als der höchste in der neuen Tabelle.

Ein anderer Ansatz, so zusammengesponnen: erstelle einen AFTER-INSERT-Trigger, der alle Datensätze in eine dritte Tabelle rüberkopiert. Dann kannst du getrost mit „create as select“ und „truncate“ operieren. Die in der Zwischenzeit erstellten Datensätze sind ja gespeichert. Danach kannst du den Trigger löschen oder deaktivieren…

Gruß

Sancho

Hallo Regine!

Das Problem hört sich nach einer klassischen Partitionierungsgeschichte an. Damit kannst du die Tabelle quasi „aufteilen“ und die einzelnen Partitionen nach Belieben löschen, aufteiln, zusammenführen etc. Am Besten siehst du dir das ganze einem selbst im „Database Administrator’s Guide“ bzw. vorher evtl. noch im „Concepts“ an. Wenn dir dann noch etwas unklar ist, immer her mit den Fragen.

Gruß
Martin

Vielen Dank für Eure Anregungen.

Die Idee mit der Partitionierung gefällt mir.
Ich habe auch ein Artikel gefunden, wie man eine existierende Tabelle in eine Partition-Table umwandelt.
(http://www.oracle-base.com/articles/Misc/Partitionin…)

Mal sehen, wie lange die Redifinition bei so einer Datenmenge dauert.

liebe Grüsse
Regine