Om jag förstår dig rätt förväntar du dig att Oracle ignorerar gamla dubbletter av värden och tillåter nya värden endast när de uppfyller begränsningen. Felet returneras eftersom när du lägger till en UNIQUE
begränsning skapar Oracle ett unikt index på kolumnen för att kontrollera värdena, men din tabell har redan dubbletter av värden, så den misslyckas. Jag skulle skapa det icke-unika indexet först och sedan lägga till begränsningen så att det använder ditt befintliga icke-unika index istället för att automatiskt skapa det unika indexet som skulle misslyckas:
create index arc_ix on arc (name);
alter table arc add constraint arc_uq unique (name) enable novalidate;