1. Навскидку просто возьми такое же кол-во записей и посмотри разницу )
2. Вполне возможно, что делается апдейт t2 (отмечаются обработанные записи), в таком раскладе лучше имхо,
записи для обработки выбирать небольшими партиями по индексированному полю, а не сразу все по where a2 is not null,
т.е.
for cur in (select * from t2
where a2 is not null
and rownum < 2)
loop
for cur in (select * from t2
where a2 is not null
and rownum < 1001)
loop
--здесь код на select, update, delete с if-else на таблицу t3;
--с коммитами на каждую тысячу записей;
end loop;
commit;
end loop;
Правда встает вопрос с сортировкой, если только с ней, то надо думать )
Исхожу из некогда витавшей в воздухе гипотезы о том, что если во время селекта выбираемые данные были изменены, оракл доходя до измененных данных должен вроде как, брать их из отката и вплоть до того, что может типа начать выполнять запрос заново )
(может и не прав, легенду не проверял :), тем более касаемо итераций в курсоре). Если кто прояснит по пути, буду рад )