【问题标题】:Modify materialized view query修改物化视图查询
【发布时间】:2011-05-15 13:14:41
【问题描述】:

我需要修改物化视图查询。可以在不删除和重新创建它的情况下做同样的事情。

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    不,您不能在不删除实体化视图的情况下更改它的查询。

    CREATE MATERIALIZED VIEW 语法不支持该功能。

    ALTER MATERIALIZED VIEW 用于通过以下一种或多种方式修改现有物化视图:

    • 改变其存储特性
    • 更改其刷新方法、模式或时间
    • 改变其结构,使其成为不同类型的物化视图
    • 启用或禁用查询重写

    请参阅 Oracle 12c 第 1 版手册以了解:

    【讨论】:

      【解决方案2】:

      对于您不确定 MVIEW 是否存在的情况(这正是 CREATE OR REPLACE 的真正优势),我使用;

      BEGIN
          EXECUTE IMMEDIATE 'DROP MATERIALIZED VIEW name_of_mview';
          EXCEPTION
              WHEN OTHERS THEN
                  IF SQLCODE = -12003 THEN
                      dbms_output.put_line('MVIEW does not exist, which was somewhat expected');
                  ELSE
                      RAISE;
                  END IF;
      END;
      /
      
      CREATE MATERIALIZED VIEW name_of_mview ... AS SELECT ...
      

      【讨论】:

        【解决方案3】:

        您可以将 mview 留在原处。如果您关心的是在新 mview 实例化时尽量减少停机时间(因为您没有使用预建表),您可以执行以下操作。

        1. 在预建表上创建一个名为 mview_1 的新表
        2. 创建后,您可以删除旧的
        3. 创建或替换视图 mview 为 select * from mview_1

        现在,每当您需要重建时,您都可以在几乎没有停机时间的情况下进行重建,因为您可以简单地将视图指向新的表/mview。

        【讨论】:

        • 如果您将查询和代码指向同义词(或标准视图)并将其从错误的物化视图切换到新视图(当您必须再次修改时返回),则停机时间可以为零.物化视图的创建可能需要它所需要的所有时间,您只需在几毫秒内更改指针即可。
        【解决方案4】:

        这可能是更高版本的 Oracle 中的一个新功能,但我发现这很好用:

        DROP MATERIALIZED VIEW my_mview PRESERVE TABLE;
        
        CREATE MATERIALIZED VIEW my_mview
        ON PREBUILT TABLE ...
        

        【讨论】:

        • 请注意“PRESERVE TABLE”子句,它将保留您的原始表。然后您可以为数据库定义新定义,并且在您手动执行之前不会刷新表(对于复杂查询)。
        • 有时需要制作级联视图,这可能很危险
        【解决方案5】:

        可能可以利用现有的MV作为prebuilt table for the new MV的来源

        当然,很大程度上取决于您对查询所做的事情。例如,如果您要添加一列,则需要刷新所有内容以获取其新值。

        附言。将现有 MV 转换为表的快速方法是分区交换,但要注意gotchas。然后您操作该表以匹配新的结果集并基于操作的表创建新的 MV。

        【讨论】:

          猜你喜欢
          • 2013-01-25
          • 2021-10-24
          • 1970-01-01
          • 2022-06-16
          • 2021-06-23
          • 1970-01-01
          • 2022-11-24
          • 2013-01-20
          • 2021-04-29
          相关资源
          最近更新 更多