Se non hai altri criteri per scegliere quali righe conservare e quali conservare un approccio veloce potrebbe essere questo (da non applicare in ambienti di produzione):
STEP 1: creo tabella temporanea con i valori distinti
CREATE TABLE NOME_TABELLA_TEMPORANEA AS
SELECT DISTINCT campo1, campo2, campo3, ecc... FROM TABELLA_ORIGINALE;
STEP 2: droppo la tabella originale
DROP TABLE TABELLA_ORIGINALE;
STEP 3: rinomino la tabella temporanea
RENAME TABLE NOME_TABELLA_TEMPORANEA TO TABELLA_ORIGINALE;
L'altro approccio sicuramente meno impattante in caso di ambienti di produzione è quello di fare tutto in unica DELETE (attenzione se devi cancellare milioni di righe, potresti intasare il tablespace UNDO), per buttare giù lo statement però servirebbe sapere meglio come è strutturata la tua tabella, ti faccio un esempio che suppone che la tabella abbia una chiave primaria (in alternativa puoi provare con il ROWID) differente dal campo che ritieni "duplicato":
DELETE NOME_TABELLA a WHERE a.id != (select MIN(b.id) FROM NOME_TABELLA b WHERE a.valore = b.valore);