It is very usual in large updates or delete to have rollback segment problems
. To avoid the rollback you can use this handy script which commits every 10.000 records.
i number := 0;
cursor s1 is SELECT rowid, t.* FROM tab1 t WHERE col1 = 'value1';
for c1 in s1 loop
update tab1 set col1 = 'value2'
where rowid = c1.rowid;
i := i + 1; -- Commit after every X records
if i > 10000 then
i := 0;