We have complex materialized views that cannot be fast refreshed. We are noticing that the segment sizes of our MVs are growing, but the rows size with the MVs are the same. My understanding was that part of the process of a full refresh of a materialized view is that it
1. truncates the Materialized view
2. repopulated the materialized view
is this correct? If this is correct, our segments containing the materialized views should stay relatively the same size if the data does not change that much.
Starting from 10g, Oracle gives you an option to decide how you want the refresh to take place. The DBMS_MVIEW.REFRESH procedure has a boolean parameter called ATOMIC_REFRESH whose default value (in 10g) is TRUE. It means
TRUE => DELETE + INSERT
FALSE => TRUNCATE + INSERT
For more details, documentation is your friend.