An Oracle FORCE refresh tells Oracle to try a FAST refresh first and, if FAST refresh is not possible, perform a COMPLETE refresh instead.
The easiest way to remember it is:
REFRESH FORCE
|
Can FAST refresh?
/ \
YES NO
| |
↓ ↓
FAST COMPLETE
So:
FAST = Incremental refresh
COMPLETE = Recalculate everything
FORCE = FAST if possible, otherwise COMPLETE
1. What is a FORCE refresh?
FORCE is a refresh method that gives Oracle a choice:
- Use FAST refresh if the materialized view is eligible.
- Otherwise use COMPLETE refresh.
Example:
CREATE MATERIALIZED VIEW mv_product_sales
BUILD IMMEDIATE
REFRESH FORCE
ON DEMAND
AS
SELECT product_id,
SUM(amount) AS total_amount
FROM sales
GROUP BY product_id;
The important part is:
REFRESH FORCE
Oracle determines the appropriate refresh method when the refresh occurs.
2. What is the difference between FAST, COMPLETE and FORCE?
This is one of the most important interview questions.
| Refresh Method | What Oracle Does |
|---|---|
| FAST | Performs incremental refresh |
| COMPLETE | Recomputes the complete MV |
| FORCE | Tries FAST; if unavailable, uses COMPLETE |
Think:
FAST
↓
"I require incremental refresh"
COMPLETE
↓
"I require complete refresh"
FORCE
↓
"Use FAST if possible;
otherwise COMPLETE"
3. Why would I use FORCE?
FORCE is useful when you don't want the refresh to fail simply because FAST refresh isn't currently possible.
MV is FAST refreshable
↓
FORCE
↓
FAST refresh
But if something prevents FAST refresh:
MV is not FAST refreshable
↓
FORCE
↓
COMPLETE refresh
This provides a fallback.
4. How do I create a FORCE-refresh materialized view?
Example:
CREATE MATERIALIZED VIEW mv_dept_salary
BUILD IMMEDIATE
REFRESH FORCE
ON DEMAND
AS
SELECT department_id,
COUNT(*) AS employee_count,
SUM(salary) AS total_salary
FROM employees
GROUP BY department_id;
Here:
BUILD IMMEDIATE
↓
Populate the MV immediately
REFRESH FORCE
↓
Try FAST, otherwise COMPLETE
ON DEMAND
↓
Refresh when requested
5. Does FORCE mean FAST?
No.
This is a common interview trap.
REFRESH FAST
↓
Attempt/use FAST refresh
REFRESH FORCE
↓
Try FAST, but fall back to COMPLETE if FAST isn't possible
So:
FORCE ≠ FAST
6. Does FORCE always perform FAST refresh?
No.
Suppose:
MV is FAST refreshable
↓
FORCE
↓
FAST
But:
MV is NOT FAST refreshable
↓
FORCE
↓
COMPLETE
Therefore, you should never assume:
REFRESH FORCE
means FAST refresh every time.
7. Does FORCE always perform COMPLETE refresh?
No.
It only falls back to COMPLETE when FAST isn't possible.
FORCE
|
+-- FAST possible → FAST
|
+-- FAST impossible → COMPLETE
8. What does FORCE ON DEMAND mean?
Example:
CREATE MATERIALIZED VIEW mv_sales
BUILD IMMEDIATE
REFRESH FORCE
ON DEMAND
AS
SELECT product_id,
SUM(amount) AS total_sales
FROM sales
GROUP BY product_id;
This means:
FORCE
↓
HOW to refresh
ON DEMAND
↓
WHEN to refresh
So:
- FORCE = FAST if possible, otherwise COMPLETE
- ON DEMAND = refresh when explicitly requested or scheduled
This distinction is extremely important.
9. Does FORCE ON DEMAND automatically refresh after DML?
No.
Suppose:
INSERT INTO sales
VALUES (10, 101, SYSDATE, 500);
COMMIT;
The MV isn't necessarily refreshed immediately.
You can request a refresh:
BEGIN
DBMS_MVIEW.REFRESH('MV_SALES');
END;
/
Then Oracle chooses the appropriate refresh method according to the FORCE configuration.
10. What happens if FAST refresh is possible?
Suppose:
Base table
↓
Required MV logs exist
↓
MV definition is FAST-refreshable
↓
FORCE
↓
FAST eligible?
↓
YES
↓
FAST refresh
With the materialized view configured for FORCE, Oracle can select FAST when it is eligible.
11. What happens if FAST refresh is not possible?
Suppose:
FAST refresh requirements
↓
Not satisfied
↓
FORCE
↓
FAST not possible
↓
COMPLETE refresh
So the refresh can still succeed by recalculating the complete MV result.
12. What is the advantage of FORCE over FAST?
Consider:
CREATE MATERIALIZED VIEW mv_sales
REFRESH FAST
ON DEMAND
AS
SELECT ...;
If FAST refresh isn't possible, the refresh can fail rather than silently becoming COMPLETE.
With:
CREATE MATERIALIZED VIEW mv_sales
REFRESH FORCE
ON DEMAND
AS
SELECT ...;
Oracle can fall back to COMPLETE.
FAST
↓
Strict incremental approach
FORCE
↓
Flexible approach
13. What is the disadvantage of FORCE?
The biggest disadvantage is predictability.
With:
- REFRESH FAST — you know you are requesting FAST.
- REFRESH COMPLETE — you know you're doing a complete refresh.
- REFRESH FORCE — Oracle may choose either FAST or COMPLETE.
Therefore, a FORCE refresh can unexpectedly perform a potentially expensive complete refresh.
For a very large MV, that matters.
14. Can FORCE be dangerous for performance?
It can be, depending on the environment.
Imagine:
SALES = 5 billion rows
Normally:
FORCE
↓
FAST
↓
Efficient
But if FAST becomes unavailable:
FORCE
↓
COMPLETE
↓
Process huge amount of data
The refresh could consume substantial:
- CPU
- I/O
- TEMP
- Memory
- Time
Therefore, production systems should monitor what refresh method is actually being used.
15. How can I check the last refresh type?
Use:
SELECT mview_name,
staleness,
last_refresh_type,
last_refresh_date
FROM user_mviews;
For example:
MVIEW_NAME STALENESS LAST_REFRESH_TYPE
------------------ ---------- ------------------
MV_SALES FRESH FAST
Or:
MVIEW_NAME STALENESS LAST_REFRESH_TYPE
------------------ ---------- ------------------
MV_SALES FRESH COMPLETE
This is particularly useful for a FORCE MV.
16. Can I determine whether the MV is FAST-refreshable?
Yes.
Use:
BEGIN
DBMS_MVIEW.EXPLAIN_MVIEW(
'SELECT product_id,
SUM(amount)
FROM sales
GROUP BY product_id'
);
END;
/
Then inspect:
SELECT *
FROM MV_CAPABILITIES_TABLE;
This can show whether Oracle considers the MV capable of fast refresh and can help explain why.
17. What is the role of the materialized view log with FORCE?
A materialized view log can provide the change information needed for FAST refresh.
Example:
CREATE MATERIALIZED VIEW LOG ON sales
WITH ROWID, SEQUENCE
INCLUDING NEW VALUES;
Then:
CREATE MATERIALIZED VIEW mv_sales
REFRESH FORCE
ON DEMAND
AS
SELECT product_id,
SUM(amount) AS total_sales
FROM sales
GROUP BY product_id;
Conceptually:
FORCE
|
+------------------+
| |
FAST possible FAST impossible
| |
↓ ↓
MV LOG COMPLETE
| |
↓ ↓
FAST Recalculate
The MV log doesn't guarantee FAST eligibility; the entire MV definition and required capabilities matter.
18. Does FORCE require an MV log?
No, not inherently.
FORCE itself does not mean:
MV log required
Instead:
FORCE
↓
Try FAST
↓
If FAST requires change information,
the necessary requirements must be available
↓
Otherwise COMPLETE
Since COMPLETE refresh doesn't need incremental change information, an MV can still use the COMPLETE fallback.
19. What happens when no rows have changed?
A FORCE refresh still performs the refresh operation according to the applicable refresh method.
If FAST is possible, Oracle may perform FAST maintenance based on its refresh mechanisms.
If Oracle chooses COMPLETE, the complete result is recalculated.
Don't assume:
No changes
↓
FORCE
↓
Nothing happens
20. Can FORCE be used with aggregate materialized views?
Yes.
Example:
CREATE MATERIALIZED VIEW mv_product_summary
BUILD IMMEDIATE
REFRESH FORCE
ON DEMAND
AS
SELECT product_id,
COUNT(*) AS sale_count,
SUM(amount) AS total_sales
FROM sales
GROUP BY product_id;
If the MV satisfies FAST-refresh requirements:
FORCE → FAST
Otherwise:
FORCE → COMPLETE
21. Can FORCE be used with joins?
Yes, provided the materialized view definition itself is valid.
Example:
CREATE MATERIALIZED VIEW mv_customer_sales
BUILD IMMEDIATE
REFRESH FORCE
ON DEMAND
AS
SELECT c.customer_id,
c.customer_name,
SUM(s.amount) AS total_sales
FROM customers c
JOIN sales s
ON s.customer_id = c.customer_id
GROUP BY c.customer_id,
c.customer_name;
Whether Oracle can FAST refresh this particular MV depends on the complete query and required materialized-view capabilities.
If FAST isn't available, FORCE can use COMPLETE.
22. Can FORCE work without FAST-refresh eligibility?
Yes.
That's one of the primary reasons to use it.
MV query
↓
FAST refresh not supported
↓
FORCE
↓
COMPLETE refresh
This is different from explicitly requiring:
FAST
23. What is the difference between FORCE and COMPLETE?
| Feature | FORCE | COMPLETE |
|---|---|---|
| Try FAST | ✅ | ❌ |
| Can use FAST | ✅ | ❌ |
| Can fall back to COMPLETE | ✅ | Already COMPLETE |
| Predictable refresh method | ❌ | ✅ |
| MV logs may be useful | Yes | Not required |
| Potentially expensive full refresh | Yes, if fallback occurs | Yes |
Memory trick:
FORCE = FAST OR COMPLETE
COMPLETE = COMPLETE ONLY
24. What is the difference between FORCE and FAST?
| Feature | FORCE | FAST |
|---|---|---|
| Incremental refresh | If possible | Requested |
| Complete fallback | ✅ | ❌ |
| Flexible | ✅ | ❌ |
| Predictable method | Less | More |
| Failure if FAST unavailable | Can avoid via COMPLETE | May fail |
Memory trick:
FAST
↓
"I want FAST"
FORCE
↓
"FAST if you can;
otherwise COMPLETE"
25. What is the difference between FORCE and DBMS_MVIEW.REFRESH method?
There are two related concepts.
MV definition
You can define:
REFRESH FORCE
which specifies the MV's refresh preference.
Refresh API
You can invoke:
DBMS_MVIEW.REFRESH
and specify an appropriate refresh method.
For example, explicitly requesting COMPLETE:
BEGIN
DBMS_MVIEW.REFRESH(
list => 'MV_SALES',
method => 'C'
);
END;
/
Here:
C = COMPLETE
If you want Oracle's normal FORCE behavior, don't confuse the MV's REFRESH FORCE definition with manually forcing a particular method in the refresh API.
26. Practical FORCE Example
Step 1 — Create base table
CREATE TABLE sales (
sale_id NUMBER PRIMARY KEY,
product_id NUMBER,
sale_date DATE,
amount NUMBER
);
Step 2 — Insert data
INSERT INTO sales
VALUES (1, 101, DATE '2026-08-01', 500);
INSERT INTO sales
VALUES (2, 101, DATE '2026-08-02', 300);
INSERT INTO sales
VALUES (3, 102, DATE '2026-08-02', 1000);
COMMIT;
Step 3 — Create MV log
CREATE MATERIALIZED VIEW LOG ON sales
WITH ROWID, SEQUENCE
INCLUDING NEW VALUES;
Step 4 — Create FORCE MV
CREATE MATERIALIZED VIEW mv_product_sales
BUILD IMMEDIATE
REFRESH FORCE
ON DEMAND
AS
SELECT product_id,
COUNT(*) AS sale_count,
SUM(amount) AS total_amount
FROM sales
GROUP BY product_id;
Step 5 — Change base table
INSERT INTO sales
VALUES (
4,
101,
DATE '2026-08-03',
200
);
COMMIT;
Step 6 — Refresh
BEGIN
DBMS_MVIEW.REFRESH(
list => 'MV_PRODUCT_SALES'
);
END;
/
Because the MV is configured for FORCE, Oracle can use FAST when eligible and fall back to COMPLETE when necessary.
27. How can I see whether FORCE used FAST or COMPLETE?
Check:
SELECT mview_name,
last_refresh_type,
last_refresh_date,
staleness
FROM user_mviews
WHERE mview_name = 'MV_PRODUCT_SALES';
For example:
MVIEW_NAME LAST_REFRESH_TYPE
------------------ ------------------
MV_PRODUCT_SALES FAST
Or:
MVIEW_NAME LAST_REFRESH_TYPE
------------------ ------------------
MV_PRODUCT_SALES COMPLETE
This is especially important when diagnosing FORCE behavior.
28. Does FORCE guarantee successful refresh?
No.
This is another interview trap.
FORCE doesn't mean:
"Oracle will always successfully refresh the MV."
It means:
"Oracle can use FAST if possible
and otherwise use COMPLETE."
The underlying query, dependencies, privileges, storage, locks, errors, and other conditions can still cause the refresh to fail.
So:
FORCE ≠ guaranteed success
29. Does FORCE mean Oracle always checks FAST first?
Conceptually, yes:
FORCE
↓
Attempt/choose FAST when possible
↓
Otherwise COMPLETE
The exact internal refresh behavior is Oracle-version and context dependent, but this is the correct conceptual model for interviews.
30. Can FORCE make a materialized view real-time?
No.
For example:
REFRESH FORCE
ON DEMAND
does not mean:
DML
↓
Immediate MV refresh
It means:
DML
↓
MV may become stale
↓
Refresh requested
↓
FAST if possible
↓
Otherwise COMPLETE
So:
FORCE = HOW
ON DEMAND = WHEN
31. FORCE with BUILD IMMEDIATE
Example:
CREATE MATERIALIZED VIEW mv_sales
BUILD IMMEDIATE
REFRESH FORCE
ON DEMAND
AS
SELECT product_id,
SUM(amount)
FROM sales
GROUP BY product_id;
Meaning:
CREATE
↓
BUILD IMMEDIATE
↓
Populate MV now
Later refresh
↓
FORCE
↓
FAST if possible
↓
COMPLETE otherwise
32. FORCE with BUILD DEFERRED
Example:
CREATE MATERIALIZED VIEW mv_sales
BUILD DEFERRED
REFRESH FORCE
ON DEMAND
AS
SELECT product_id,
SUM(amount)
FROM sales
GROUP BY product_id;
Meaning:
Create MV definition
↓
Don't populate immediately
↓
Later refresh
↓
FAST if possible
↓
COMPLETE otherwise
33. Is FORCE good for production?
It can be, but you should understand the fallback cost.
For a small MV:
FORCE
↓
Simple and flexible
may be perfectly reasonable.
For a huge MV:
5 TB data
↓
FORCE
↓
FAST unexpectedly unavailable
↓
COMPLETE
↓
Very expensive refresh
You may prefer explicit control and monitoring.
34. What are common FORCE-refresh interview traps?
Trap 1 — Does FORCE mean FAST?
❌ No. It means FAST if possible, otherwise COMPLETE.
Trap 2 — Does FORCE require MV logs?
❌ Not inherently. MV logs may be needed for the FAST path.
Trap 3 — Does FORCE mean automatic refresh?
❌ No. Refresh timing is controlled separately.
Trap 4 — Does FORCE guarantee successful refresh?
❌ No. It only controls the refresh method selection/fallback.
Trap 5 — Does FORCE always perform COMPLETE if FAST is unavailable?
Conceptually, yes—that is its fallback behavior.
Trap 6 — Can FORCE be slower than FAST?
✅ Yes. If it falls back to COMPLETE, it may be substantially more expensive.
Trap 7 — Can I know which method was actually used?
✅ Yes. Check:
SELECT mview_name,
last_refresh_type
FROM user_mviews;
35. FAST vs COMPLETE vs FORCE — Final Comparison
MV REFRESH METHODS
|
+--------------+--------------+--------------+
| | |
↓ ↓ ↓
FAST COMPLETE FORCE
| | |
↓ ↓ ↓
Incremental Recalculate Try FAST
changes entire result |
↓
FAST possible?
/ \
YES NO
↓ ↓
FAST COMPLETE
| Question | FAST | COMPLETE | FORCE |
|---|---|---|---|
| Incremental? | ✅ | ❌ | If possible |
| Complete rebuild? | ❌ | ✅ | If FAST unavailable |
| MV log potentially needed? | ✅ | ❌ | For FAST path |
| Fallback to COMPLETE? | ❌ | N/A | ✅ |
| Predictable method? | ✅ | ✅ | ❌ |
| Can become expensive unexpectedly? | Less likely | Always full | Yes, if fallback occurs |
36. Most Important Interview Questions
Q: What is FORCE refresh?
FORCE refresh tells Oracle to use FAST refresh when possible and fall back to COMPLETE refresh when FAST isn't possible.
Q: FORCE vs FAST?
FAST requests incremental refresh; FORCE allows FAST or COMPLETE.
Q: FORCE vs COMPLETE?
COMPLETE always recalculates the entire MV; FORCE attempts FAST first and can fall back to COMPLETE.
Q: Does FORCE require an MV log?
No. An MV log may be needed for the FAST path, but COMPLETE refresh does not require incremental change information.
Q: Does FORCE mean automatic refresh?
No. FORCE specifies refresh method selection; ON DEMAND and other refresh mechanisms determine when refresh occurs.
Q: How do I check what actually happened?
SELECT mview_name,
last_refresh_type,
last_refresh_date
FROM user_mviews;
37. Final FORCE Refresh Cheat Sheet
Memorize this:
FAST
↓
Incremental only
COMPLETE
↓
Recalculate everything
FORCE
↓
FAST if possible
↓
COMPLETE if FAST isn't possible
And:
BUILD IMMEDIATE
↓
Populate MV now
BUILD DEFERRED
↓
Populate later
ON DEMAND
↓
Refresh when requested
ON COMMIT
↓
Refresh associated with commit,
when supported by the refresh method/definition
One-Line Interview Answer
Oracle MV FORCE refresh provides a fallback strategy: Oracle attempts a FAST incremental refresh when the materialized view is eligible; otherwise it performs a COMPLETE refresh.
No comments:
Post a Comment