Oracle, wie das löschen von einem Tisch, außer einigen Partitionen Daten
Ich habe eine große Tabelle mit vielen Daten partitioniert in mehrere Partitionen. Ich will, dass ein paar Partitionen wie Sie sind, sondern löschen Sie den rest der Daten aus der Tabelle. Ich habe versucht, zu suchen für eine ähnliche Frage gestellt und konnte Sie nicht finden es in stackoverflow. Was ist der beste Weg, um eine Abfrage zu schreiben, die in Oracle, um das gleiche zu erreichen?
Möchten Sie die Datensätze löschen, behalten aber den Partitionen? Oder entfernen Sie die Partitionen?
Nein, ich möchte nur die Datensätze löschen, aber Sie behalten die Partitionen selbst - danke
Nein, ich möchte nur die Datensätze löschen, aber Sie behalten die Partitionen selbst - danke
InformationsquelleAutor Bolimera Hannah | 2014-11-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist leicht zu löschen die Daten von einer bestimmten partition: diese Anweisung löscht alle Daten für Februar 2012:
Eine schnellere Methode ist das abschneiden der partition:
Gibt es zwei mögliche Haken hier:
Auch, es ist DDL, also kein rollback.
Wenn wir nie wieder wollen zum speichern von Daten für diesen Monat wir können die drop-partition:
Das problem entsteht, wenn wir wollen, zap mehrere Partitionen, und wir keine Lust auf alles Tippen. Wir können nicht parametrieren dem Namen der partition, weil es ein name-Objekt nicht in einer Variablen (ohne Anführungszeichen). So lassen Sie nur die dynamische SQL.
Als Sie möchten, entfernen die meisten Daten aber behalten Sie die partition Struktur abschneiden der Partitionen ist die beste option. Denken Sie daran, erlöschen alle Integritätsbedingungen (und reaktivieren Sie danach).
Sollten Sie auf jeden Fall führen Sie die Schleife zunächst mit
execute immediate
Aufruf auskommentiert, so können Sie sehen, welche Partitionen deine WHERE-Klausel auswählen. Offensichtlich haben Sie ein back-up und wiederherstellen können Daten, die Sie nicht bedeuteten zu löschen. Aber der Schnellste Weg, um verpflichten sich, eine Wiederherstellung ist nicht zu brauchen.Danach diese Abfrage ausführen, um zu sehen, welche Partitionen sollte man rebuild:
Können Sie automatisieren den Wiederaufbau Aussagen in ähnlicher Weise.
Andere Art, die Dinge zu tun. Mit exchange partition könnte es ziemlich schnell. Es könnte auch langsamer sein. Es hängt auch von Sachen wie Fremdschlüssel und Indizes, und das Verhältnis von gezappt Partitionen beibehalten lieben. Wenn die Leistung wichtig ist und/oder Sie müssen sich verpflichten, diesen Vorgang regelmäßig, dann sollten Sie einen benchmark für die verschiedenen Optionen und sehen, was funktioniert am besten für Sie.
Statt
DELETE
oderDROP
Sie können auchTRUNCATE
die partition.sorry, ich hatte nicht vollständig verarbeitet das Verhältnis von zap zu behalten. Ich überarbeitete meine Antwort entsprechend Ihren Anforderungen.
Alternativ, anstatt einer Schleife über alle Partitionen und löschen Sie Sie und binden Sie die Partitionen, die ich brauche, an die ich denke, das kopieren der Daten von Partitionen, die ich brauche in eine temp-Tabelle und kürzen Sie die ursprüngliche Tabelle und kopieren Sie die Daten aus der temp-Tabelle zur ursprünglichen Tabelle. Nicht sicher, welches ist der bessere Ansatz ist, was Leistung und Performance betrifft.
Hallo, wenn Sie drop partition können Sie mit der Klausel
update global indexes
. Mit dieser Klausel, die Sie nicht erlöschen Ihrer Indizes!InformationsquelleAutor APC