5+ days to build 2-3 million rows of MV? Thats waaaaay of punches, too much to be just bad SQL. I assume that you can be blocked by some other process (?). Not sure, but check this from another session after starting MV recovery:
select s1.username || '@' || s1.machine || ' ( SID=' || s1.sid || ' ) is blocking ' || s2.username || '@' || s2.machine || ' ( SID=' || s2.sid || ' ) ' AS blocking_status from v$lock l1, v$session s1, v$lock l2, v$session s2 where s1.sid=l1.sid and s2.sid=l2.sid and l1.BLOCK=1 and l2.request > 0 and l1.id1 = l2.id1 and l2.id2 = l2.id2 ;
Just to guess. If you use Toad, you can also get this information (via Database-> monitor-> session browser). It will also show you the progress of Long Ops (table scan, etc.).
Edit: Oh, btw, building MV using nologging should help to do a little damage once you determine that you have no problems mentioned above.
tbone source share