gpt4 book ai didi

sql - 无法在预建表上重新创建物化 View

转载 作者:行者123 更新时间:2023-12-01 14:41:54 25 4
gpt4 key购买 nike

我正在尝试执行的步骤:

CREATE TABLE sample.MV(application_mode varchar2(25));

CREATE MATERIALIZED VIEW sample.MV
ON PREBUILT TABLE
REFRESH FORCE ON DEMAND
AS
SELECT application_mode
FROM sample.tbl_name
WHERE cnt > 0;

当任何其他用户尝试删除并重新创建 MV 时
DROP MATERIALIZED VIEW sample.MV;
CREATE MATERIALIZED VIEW sample.MV
ON PREBUILT TABLE
REFRESH FORCE ON DEMAND
AS
SELECT application_mode
FROM sample.tbl_name
WHERE cnt > 0;

他在重新创建时遇到以下错误:

ORA-32334: cannot create prebuilt materialized view on a table already referenced by a MV



为什么会这样?

用户得到了相同的解决方法,即首先删除表
然后重新创建表,重新创建 MV。

oracle 真正奇怪的行为是,该用户删除和重新创建 MV 的所有后续尝试都运行良好,没有错误。

最佳答案

更新 2:它确实连接到 其他一些直接或间接使用/使用这个的 mview . (正如 @Marmite Bomber 所建议的,但他的 all_snapshots 基于查询没有帮助)

您可以通过 user_dependencies 找到它(或者可能 all_dependencies )使用类似于以下查询的内容。您可能必须遵循一些关于同义词、 View 、函数等的依赖关系图才能找到连接。

(在我的情况下,我知道在使用 preserve table 删除 matview 之前存在依赖关系。所以这个表仍然“以某种方式连接”到一些依赖“更高”的 matview,因此似乎发出了错误。)

select * from user_dependencies 
where 1=1 -- for easier comment filter usage below
--and referenced_owner=user -- if only current user relevant
--and not type in ('TRIGGER') -- e.g. to skip some auto-gen. triggers
and referenced_name = '<my matview>'
order by name, referenced_name

所以一个 工作解决方案是也删除“更高”/依赖 mview (例如,使用 preserve table 选项)并重新创建它们(例如,使用 prebuilt table 选项,因此无需重新构建)。

以前/旧的发现/解决方法:

我遇到了同样的问题,我自动“重命名”了一些物化 View ,这在编程上是不可能的(11.2)。
所以我从旧的matviews创建了新的matviews
  • 删除它们,但不删除表数据 ( preserve table ) 和
  • 将现有表与新表重新关联( prebuilt table )。

  • 一切正常,但对于导致此问题的一个 matview ORA-32334 :-(

    使用以下 SQL 进行调试并没有给出为什么系统认为该表仍与某些 matview 相关联的线索,所以我只能假设它是具有某种随机行为的错误:
    select * from user_mviews

    select * from user_objects
    where object_name like '%<some meaningful filter criteria>%'
    order by object_type, object_name

    我的解决方法:从头开始重新创建特定的 mview。

    关于sql - 无法在预建表上重新创建物化 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38345202/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com