Ora 12033
  • ORA-12033 ORA-12033: "string"."string"のマテリアライズド・ビュー・ログからはフィルタ列を使用できません。

原因: マテリアライズド・ビュー・ログに、記録されたフィルタ列がないか、またはフィルタ列に関連するタイムスタンプが、前回のリフレッシュ時刻より新しい時刻です。
処置: 次の高速リフレッシュの前に、完全リフレッシュを実行する必要があります。必要な場合は、マテリアライズド・ビュー・ログにフィルタ列を追加してください。

よくあるケースは集計、REFRESH FASTの場合、ROWID, INCLUDING NEW VALUES, SEQUENCE(col1, col2, col3, …)がないことです。

例:

CREATE MATERIALIZED VIEW LOG ON products WITH SEQUENCE, ROWID
(prod_id, prod_name, prod_desc, prod_subcategory, prod_subcategory_desc,
prod_category, prod_category_desc, prod_weight_class, prod_unit_of_measure,
prod_pack_size, supplier_id, prod_status, prod_list_price, prod_min_price)
INCLUDING NEW VALUES;

CREATE MATERIALIZED VIEW LOG ON sales
WITH SEQUENCE, ROWID
(prod_id, cust_id, time_id, channel_id, promo_id, quantity_sold, amount_sold)
INCLUDING NEW VALUES;

CREATE MATERIALIZED VIEW product_sales_mv
PCTFREE 0 TABLESPACE demo
STORAGE (INITIAL 8k NEXT 8k PCTINCREASE 0)
BUILD IMMEDIATE
REFRESH FAST
ENABLE QUERY REWRITE
AS SELECT p.prod_name, SUM(s.amount_sold) AS dollar_sales,
COUNT(*) AS cnt, COUNT(s.amount_sold) AS cnt_amt
FROM sales s, products p
WHERE s.prod_id = p.prod_id GROUP BY p.prod_name;