2016-04-22 2 views
1

Ich muss ein Skript schreiben, das die Daten eines Tages aus einer einzelnen Tabelle nimmt und in eine andere Tabelle ablegt (wo mein anderer Prozess diese Daten verarbeitet). Die Tabelle, aus der ich Daten exportieren möchte, ist jedoch eine "Live" -Tabelle mit einer hohen Anzahl an Einfügungen. Jede Art von Sperre (während der Export ausgeführt wird) ist nicht akzeptabel. Ich weiß, dass mysql eine Möglichkeit hat, keine Sperre über das Flag "--skip-lock-tables" zu halten. Hat Oracle etwas Ähnliches? Wenn nicht, was ist der beste Weg, dies zu erreichen?Exportieren von Ein-Tag-Daten ohne Halten der Sperre, in Oracle

Oracle Version verwendet - Oracle SE One 12.1.0.1.v2

+1

@Tim: schreibgeschützte Abfragen nehmen in Oracle keine Sperren an. – Mat

+0

Gibt es eine Spalte in dieser Tabelle, die verwendet werden kann, um Datensätze nach dem Alter zu sortieren? –

+0

@TimBiegeleisen - Ja, es gibt eine Spalte entry_date vom Typ timestamp. – Sameervb

Antwort

1

in der Zeit An dem Punkt, wenn SELECT startet, wird ein SCN SELECT angebracht. Änderungen an den Daten nach diesem SCN wirken sich nicht auf Ihre SELECT aus. Ihr SELECT liest die alten Daten von UNDO. Wenn es sich um eine hohe Transaktionstabelle handelt und Sie erwarten, dass Ihr SELECT lange läuft, stellen Sie sicher, dass Sie über genügend UNDO-Speicherplatz und genügend UNDO_RETENTION verfügen.

Auch Fokus auf gutes Design verhindert mögliche Probleme. Aus diesem Blickwinkel würde ich vorschlagen, tägliche Partitionen in Ihrer Quellentabelle zu implementieren. Dies würde dazu beitragen, die Daten eines Tages einfach zu sichern und die Tabelle in Zukunft zu verwalten.

Hoffe, das hilft.