Sql 修改物化视图查询

Sql 修改物化视图查询,sql,oracle,Sql,Oracle,我需要修改物化视图查询。可以在不删除和重新创建的情况下执行相同的操作 您可以利用现有MV作为 当然,很大程度上取决于您对查询所做的操作。例如,如果要添加列,则需要刷新所有内容以获取其新值 另外,将现有MV转换成表的快速方法是分区交换,但要注意。然后操纵表格以匹配新的结果集,并基于操纵的表格创建新的MV。您可以将MVView保留在原位。如果您关心的是在新mview实例化时最小化停机时间(因为您没有使用预构建的表),那么您可以执行以下操作 在预构建的表上创建一个名为mview_1的新表 创建后,可以

我需要修改物化视图查询。可以在不删除和重新创建的情况下执行相同的操作

您可以利用现有MV作为

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


另外,将现有MV转换成表的快速方法是分区交换,但要注意。然后操纵表格以匹配新的结果集,并基于操纵的表格创建新的MV。

您可以将MVView保留在原位。如果您关心的是在新mview实例化时最小化停机时间(因为您没有使用预构建的表),那么您可以执行以下操作

  • 在预构建的表上创建一个名为mview_1的新表
  • 创建后,可以删除旧的
  • 从mview_1中选择*创建或替换视图mview

  • 现在,无论何时需要重建,您都可以在几乎没有停机时间的情况下完成重建,因为您可以简单地将视图指向新表/mview。对于您不确定mview是否存在的情况(这是创建或替换的真正好处),我使用


    不,您不能在不删除物化视图的情况下更改其查询

    创建物化视图语法不支持该功能

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

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

    有关以下内容,请参阅Oracle 12c第1版手册:

    • 创建物化视图语法:

    • 更改物化视图语法:


    这可能是Oracle更高版本中的一项新功能,但我发现它很好地工作:

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

    如果您将查询和代码指向同义词(或标准视图),并将其从错误的物化视图切换到新视图(以及在需要再次修改时切换回来),则停机时间可以为零。具体化视图的创建可能需要所有时间,只要在几毫秒内指针准备就绪时更改指针即可。然后,您可以将新定义定义到数据库中,直到您手动执行此操作(对于复杂查询),表才会刷新。有时需要创建级联删除视图,这可能很危险
    DROP MATERIALIZED VIEW my_mview PRESERVE TABLE;
    
    CREATE MATERIALIZED VIEW my_mview
    ON PREBUILT TABLE ...