Jeśli dobrze zrozumiem, oczekujesz, że Oracle zignoruje stare zduplikowane wartości i zezwoli na nowe tylko wtedy, gdy spełnią ograniczenie. Błąd jest zwracany, ponieważ po dodaniu UNIQUE
ograniczenie, Oracle tworzy unikalny indeks w kolumnie, aby sprawdzić wartości, ale tabela ma już zduplikowane wartości, więc to się nie udaje. Najpierw utworzyłbym nieunikalny indeks, a następnie dodałby ograniczenie, aby używał istniejącego nieunikatowego indeksu zamiast automatycznie tworzyć unikalny indeks, który by się nie powiódł:
create index arc_ix on arc (name);
alter table arc add constraint arc_uq unique (name) enable novalidate;