Ho un database Oracle molto grande, con molte tabelle e milioni di righe. Devo cancellare alcune delle righe end-to-end. Per end-to-end, voglio dire, se voglio cancellare una riga da una tabella, devo prima cancellare tutti i record corrispondenti nelle tabelle figlio e assicurarmi che l'eliminazione avvenga senza errori di violazione del vincolo durante l'eliminazione della voce della tabella genitore.
Ad esempio:
Table A defines dependency over Table B and Table C (means Table A has foreign key constraint on Table B and Table C).
Table B defines dependency over Table C and Table D.
Voglio eliminare le righe in questo ordine specifico come segue:
Tabella A < = Tabella B < = Tabella C < = Tabella D
Ho trovato due approcci:
-
Utilizzo di un'API del servizio che accetta la riga padre della tabella e archivia tutti i dati nel formato JSON e continua a eliminare la voce utilizzando l'opzione cascade.
-
Un'altra opzione è usare delete-with-cascade insieme ai trigger per salvare i valori cancellati.
Una volta che i dati sono stati recuperati, voglio inserirli meglio in tabelle archiviate simili, Table_A_archived, Table_B_archived etc o Se può essere scaricato nel file, va bene anche così.
Qualche idea sugli approcci iniziali sarà davvero preziosa. Se qualcuno ha già fatto questo tipo di cose prima, sarà fantastico imparare dalla loro esperienza.
Solo FYI, questo è un database live e non posso fare cose assurde (posso ovviamente testarlo prima di spingerlo a prod :)). Inoltre, la cancellazione / archiviazione non è solo sulla base del tempo.
Grazie in anticipo!