gpt4 book ai didi

oracle - 具有相同名称的实例化 View 和表

转载 作者:行者123 更新时间:2023-12-04 05:47:50 25 4
gpt4 key购买 nike

我有点理解物化 View ,并且之前曾与他们合作过。最近出现了一个问题,即为什么特定报告没有显示最新数据,所以我调查了这个问题。显然,他们有一个临时表,之前装有crontab,后来又切换到了物化 View 。

当我使用以下查询查询数据库时(表名已更改):

SELECT * FROM all_objects WHERE object_name = 'TEMP_DATA';

这实际上在同一模式中显示了两个对象:一个表和另一个物化 View
OWNER   OBJECT_NAME  OBJECT_TYPE        DATA_OBJECT_ID  LAST_DDL_TIME     TIMESTAMP
SCHEMA TEMP_DATA TABLE 110623 08/06/2013 15:38 2013-08-06:14:53:01
SCHEMA TEMP_DATA MATERIALIZED VIEW 10/30/2015 00:00 2013-08-06:14:56:33

而且,当我尝试更改表以重命名它时,它说不能重命名实例化 View 。

我的问题是,物化 View 是否实际上创建了一个具有相同名称的表,如果是,当我执行 SELECT时,数据来自何处(表或MView)?

还是仅仅是早期的剩余表格?如果是这样,Oracle是否允许使用相同名称的不同类型的对象? (我真的为此感到难过,因为我认为每个对象都必须有一个唯一的名称!)。

奇怪的是,如果它们是2个对象,则在下面的SQL中使用哪个对象:
SELECT * FROM TEMP_DATA;

对此有任何见解,不胜感激。

根据@Alex和@Husqvik的响应更新:
在Mview定义中,我看到以下内容:
BUILD IMMEDIATE  
REFRESH COMPLETE
START WITH TO_DATE('06-Nov-2015','dd-mon-yyyy')
NEXT trunc(sysdate) + 1
WITH PRIMARY KEY

这是否意味着它应该每天(明天在此更新)?明天刷新后, START WITH 会更改为07-Nov吗?

而且,它会自动刷新吗?如果是,它将何时刷新?

是否有什么事情可以阻止它刷新,因为用户提示使用此MView在报表中看不到最新数据,所以这就是为什么我首先要看一下它的原因?

这是MView的完整DDL:
DROP MATERIALIZED VIEW SCHEMA.TEMP_DATA;
CREATE MATERIALIZED VIEW SCHEMA.TEMP_DATA
TABLESPACE ITS_DATASPACE
PCTUSED 0
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 64K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
)
NOCACHE
LOGGING
NOCOMPRESS
NOPARALLEL
BUILD IMMEDIATE
REFRESH COMPLETE
START WITH TO_DATE('06-Nov-2015','dd-mon-yyyy')
NEXT trunc(sysdate) + 1
WITH PRIMARY KEY
AS
/* Formatted on 2015/11/05 09:35 (Formatter Plus v4.8.8) */
SELECT *
FROM SCHEMA.h_case_data
WHERE status LIKE 'M%';

COMMENT ON MATERIALIZED VIEW SCHEMA.TEMP_DATA IS 'snapshot table for snapshot SCHEMA.TEMP_DATA';

CREATE INDEX SCHEMA.CASE_ID_IDX ON SCHEMA.TEMP_DATA
(CASE_ID)
LOGGING
TABLESPACE ITS_DATASPACE
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 64K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
)
NOPARALLEL;

CREATE INDEX SCHEMA.STATUS_IDX ON SCHEMA.TEMP_DATA
(STATUS)
LOGGING
TABLESPACE ITS_DATASPACE
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 64K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
)
NOPARALLEL;

最佳答案

From the documentation:

When you create a materialized view, Oracle Database creates one internal table and at least one index, and may create one view, all in the schema of the materialized view. Oracle Database uses these objects to maintain the materialized view data.



因此,具有相同名称的表和实例化 View 是正常的。 MV需要将数据存储在某个地方,因此拥有一个表是有意义的。然后,MV本身定义如何维护表数据。

您可以使用 ON PREBUILT TABLE clause在现有表上创建 View ,我假设这是“他们之前拥有一个临时表...之后又切换到了物化 View ”的含义。

您还可以采用另一种方法,即使用 DROP MATERIALIZED VIEW ... PRESERVE TABLE option,它将基础表留在后面。

当您使用 SELECT * FROM TEMP_DATA;时,您正在查询基础表,但是区别并不重要,因为它们是指同一组合对象。

根据稍后要添加到问题中的定义,它将在每天午夜刷新。

关于oracle - 具有相同名称的实例化 View 和表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33552237/

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